home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / tkgwb.s < prev    next >
Text File  |  1997-01-31  |  188KB  |  13,259 lines

  1.   
  2.  
  3. *************************************************
  4. * Stuff to do to get a C2P version:
  5. * Change copperlist
  6. * Change wall drawing
  7. * change floor drawing
  8. * change object drawing
  9. * change polygon drawing (ugh)
  10. * Write a palette generator program in AMOS
  11. * to provide a good 256 colour palette and
  12. * convert all graphics files specified
  13. * (possibly included in the game linker
  14. * program).
  15. * Possibly change the wall/floor/object
  16. * palettes to look nicer with more shades.
  17. * RE-implement stippling (if not present)
  18. * as it will look gorgeous now.
  19. *************************************************
  20.  
  21. ;MIDDLEX set 96
  22. ;RIGHTX set 191
  23. ;BOTTOMY set 160 
  24.  
  25. ;MIDDLEX set 96
  26. ;RIGHTX set 191
  27. ;BOTTOMY set 160
  28.  
  29. _break    macro
  30. ;    bkpt    \1
  31.     endm
  32.  
  33.  
  34. FILTER    macro
  35. ;    move.l    d0,-(sp)
  36. ;    move.l    #65000,d0
  37. ;.loop\@
  38. ;    bchg    #1,$bfe001
  39. ;    dbra    d0,.loop\@
  40. ;    move.l    (sp)+,d0
  41.     endm
  42.  
  43. BLACK    macro
  44.     move.w    #0,$dff180
  45.     endm
  46.  
  47. RED    macro
  48.     move.w    #$f00,$dff180
  49.     endm
  50.  
  51. FLASHER macro
  52. ;    movem.l    d1,-(sp)
  53. ;    move.w    #-1,d1
  54. ;
  55. ;loop3\@
  56. ;;    move.w    #\1,$dff180
  57. ;    nop
  58. ;    nop
  59. ;    move.w    #\2,$dff180
  60. ;    nop
  61. ;    nop
  62. ;    dbra    d1,loop3\@
  63.  
  64. ;    movem.l    (sp)+,d1
  65.  
  66.     endm
  67.  
  68. GREEN    macro
  69.     move.w    #$0f0,$dff180
  70.     endm
  71.  
  72. BLUE    macro
  73.     move.w    #$f,$dff180
  74.     endm
  75.  
  76. DataCacheOff macro
  77.     movem.l    a0-a6/d0-d7,-(sp)
  78.     move.l    4.w,a6
  79.     moveq    #0,d0
  80.     move.l    #%0000000100000000,d1
  81.     jsr    _LVOCacheControl(a6)
  82.     movem.l    (sp)+,a0-a6/d0-d7
  83.     endm
  84.  
  85. DataCacheOn macro
  86.     movem.l    a0-a6/d0-d7,-(sp)
  87.     move.l    4.w,a6
  88.     moveq    #-1,d0
  89.     move.l    #%0000000100000000,d1
  90.     jsr    _LVOCacheControl(a6)
  91.     movem.l    (sp)+,a0-a6/d0-d7
  92.     endm
  93.  
  94.     opt    P=68020
  95.  
  96.     include utils:sysinc/hardware/intbits.i
  97.     include    workbench:utilities/devpac/system            use pre-assembled header
  98.     include    exec/exec_lib.i
  99.     include    intuition/intuition.i
  100.     include    intuition/intuition_lib.i
  101.     include    graphics/graphics_lib.i
  102.     include    graphics/text.i
  103.  
  104.  
  105. CD32VER equ 0
  106.  
  107. maxscrdiv EQU 8
  108. max3ddiv EQU 5
  109. playerheight EQU 12*1024
  110. playercrouched EQU 8*1024
  111. scrheight EQU 80
  112.  
  113. ; k/j/m
  114.  
  115. ; 4/8
  116. ; s/x
  117. ; b/n
  118.  
  119. midoffset EQU 104*4*40
  120.  
  121.  
  122.  SECTION Scrn,CODE
  123. OpenLib       equ -552
  124. CloseLib      equ -414
  125.  
  126. INTREQ        equ    $09C
  127. INTENA        equ    $09A
  128. INTENAR    equ    $01C
  129. DMACON        equ    $096
  130.  
  131. SERPER        equ    $032
  132. SERDATR    equ    $018
  133. SERDAT        equ    $030
  134. vhposr        equ $006    
  135. vhposrl    equ $007 
  136.  
  137. bltcon0    equ $40 
  138. bltcon1    equ $42
  139. bltcpt        equ $48
  140. bltbpt        equ $4c
  141. bltapt        equ $50
  142. spr0ctl    equ $142
  143. spr1ctl    equ $14a
  144. spr2ctl    equ $152
  145. spr3ctl    equ $15a
  146. spr4ctl    equ $162
  147. spr5ctl    equ $16a
  148. spr6ctl    equ $172
  149. spr7ctl    equ $17a
  150. spr0pos    equ $140
  151. spr1pos    equ $148
  152. spr2pos    equ $150
  153. spr3pos    equ $158
  154. spr4pos    equ $160
  155. spr5pos    equ $168
  156. spr6pos    equ $170
  157. spr7pos    equ $178
  158. bltdpt         equ $54
  159. bltafwm    equ $44
  160. bltalwm    equ $46
  161. bltsize         equ $58
  162. bltcmod         equ $60
  163. bltbmod         equ $62
  164. bltamod         equ $64
  165. bltdmod         equ $66
  166. diwstart        equ $8e         ; Screen hardware registers.
  167. diwstop         equ $90
  168. ddfstart        equ $92
  169. ddfstop         equ $94
  170. bplcon0         equ $100
  171. bplcon1         equ $102
  172. col0            equ $180
  173. col1            equ $182
  174. col2        equ $184
  175. col3        equ $186
  176. col4        equ $188
  177. col5        equ $18a
  178. col6        equ $18c
  179. col7        equ $18e
  180. col8            equ $190
  181. col9            equ $192
  182. col10           equ $194
  183. col11           equ $196
  184. col12           equ $198
  185. col13           equ $19a
  186. dmacon        equ $96
  187. dmaconr        equ $002
  188. intenar        equ $01c
  189. intena        equ $09a
  190. intreq        equ $09c
  191. intreqr        equ $01e
  192. intreqrl    equ $01f
  193. bpl1pth         equ $e0
  194. bpl1ptl         equ $e2
  195. bpl2pth        equ $e4
  196. bpl2ptl        equ $e6
  197. bpl3pth        equ $e8
  198. bpl3ptl        equ $ea
  199. bpl4pth        equ $ec
  200. bpl4ptl        equ $ee
  201. bpl5pth        equ $f0
  202. bpl5ptl        equ $f2
  203. bpl6pth        equ $f4
  204. bpl6ptl        equ $f6
  205. bpl7pth        equ $f8
  206. bpl7ptl        equ $fa
  207. bpl8pth        equ $fc
  208. bpl8ptl        equ $fe
  209. spr0pth        equ $120
  210. spr0ptl        equ $122
  211. spr1pth        equ $124
  212. spr1ptl        equ $126
  213. spr2pth        equ $128
  214. spr2ptl        equ $12a
  215. spr3pth        equ $12c
  216. spr3ptl        equ $12e
  217. spr4pth        equ $130
  218. spr4ptl        equ $132
  219. spr5pth        equ $134
  220. spr5ptl        equ $136
  221. spr6pth        equ $138
  222. spr6ptl        equ $13a
  223. spr7pth        equ $13c
  224. spr7ptl        equ $13e
  225. adkcon        equ   $09E
  226.  
  227.  
  228. ; move.l #length,d0
  229. ; moveq.l #2,d1    ; chipmem
  230. ; move.l 4.w,a6
  231. ; jsr allocmem(a6) = -198
  232.  
  233. ; tst.l d0
  234. ; beq.s ohbugger
  235. ; move.l d0,memaddr
  236.  
  237.  
  238. ; move.l 4.w,a6
  239. ; move.l memaddr,a1
  240. ; move.l #size,d0
  241. ; jsr freemem(a6) =-210
  242.  
  243.  
  244. ** This waits for the blitter to finish before allowing program
  245. ** execution to continue.
  246.  
  247.  
  248.  include "ab3:source_4000/protsetupdecode"
  249.  
  250. SAVEREGS MACRO
  251.  movem.l d0-d7/a0-a6,-(a7)
  252.  ENDM
  253.  
  254. GETREGS MACRO
  255.  movem.l (a7)+,d0-d7/a0-a6
  256.  ENDM
  257.  
  258.  
  259. WB MACRO
  260. \@bf:
  261.  btst #6,dmaconr(a6)
  262.  bne.s \@bf
  263.  ENDM
  264.  
  265. WBa MACRO
  266. \@bf:
  267.  move.w #\2,$dff180
  268.  
  269.  btst #6,$bfe001
  270.  bne.s \@bf
  271. \@bz:
  272.  
  273.  move.w #$f0f,$dff180
  274.  
  275.  btst #6,$bfe001
  276.  beq.s \@bz
  277.  
  278.  ENDM
  279.  
  280. *Another version for when a6 <> dff000
  281.  
  282. WBSLOW MACRO
  283. \@bf:
  284.  btst #6,$dff000+dmaconr
  285.  bne.s \@bf
  286.  ENDM
  287.  
  288. WT MACRO
  289. \@bf:
  290.  btst #6,(a3)
  291.  bne.s \@bd
  292.  rts
  293. \@bd: 
  294.  btst #4,(a0)
  295.  beq.s \@bf
  296.  ENDM
  297.  
  298. WTNOT MACRO
  299. \@bf:
  300.  btst #6,(a3)
  301.  bne.s \@bd
  302.  rts
  303. \@bd: 
  304.  btst #4,(a0)
  305.  bne.s \@bf
  306.  ENDM
  307.  
  308. **
  309.  
  310.  include "ab3:source_4000/ProtectionProtection"
  311.  include "macros.i"
  312.  include "ab3:source_4000/defs.i"
  313.  
  314.  move.w (a0)+,mors
  315.  
  316. ;    FLASHER $0f0,$fff
  317.  
  318. ; PROTFCALC
  319. ; PROTGCALC
  320. ; PROTHCALC
  321. ; PROTICALC
  322. ; PROTKCALC
  323. ; PROTLCALC
  324. ; PROTMCALC
  325.  
  326.  move.l #PALETTEBIT,a0
  327.  move.l #COPIEDPAL+4,a1
  328.  move.w #255,d0
  329.  
  330. copydown:
  331.  move.b 1(a0),(a1)
  332.  move.b 3(a0),4(a1)
  333.  move.b 5(a0),8(a1)
  334.  add.w #6,a0
  335.  add.w #12,a1
  336.  dbra d0,copydown
  337.  
  338.  move.l 4.w,a6
  339.  lea VBLANKInt(pc),a1
  340.  moveq #INTB_VERTB,d0
  341.  jsr _LVOAddIntServer(a6)
  342.  
  343.  
  344.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  345.  move.w intenar(a6),_storeint
  346.  and.w #$c000,_storeint
  347.  
  348.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  349.  
  350.  
  351.  st GOURSEL
  352.  
  353.  
  354.     IFEQ CD32VER
  355. ; move.l 4.w,a6
  356. ; lea KEYInt(pc),a1
  357. ; moveq #INTB_PORTS,d0
  358. ; jsr _LVOAddIntServer(a6)
  359.     ENDC
  360.  
  361.  IFNE CD32VER
  362.  clr.b PLR1KEYS
  363.  clr.b PLR1PATH
  364.  clr.b PLR1MOUSE
  365.  st PLR1JOY
  366.  clr.b PLR2KEYS
  367.  clr.b PLR2PATH
  368.  clr.b PLR2MOUSE
  369.  st PLR2JOY
  370.  ELSE
  371.  st PLR1KEYS
  372.  clr.b PLR1PATH
  373.  clr.b PLR1MOUSE
  374.  clr.b PLR1JOY
  375.  st PLR2KEYS
  376.  clr.b PLR2PATH
  377.  clr.b PLR2MOUSE
  378.  clr.b PLR2JOY
  379.  ENDC
  380.  
  381.  PRSDO
  382.  
  383.  move.l #2,d1    
  384.  move.l #10240*2,d0
  385.  move.l 4.w,a6
  386.  jsr -198(a6)
  387.  move.l d0,TEXTSCRN
  388.  move.w d0,TSPTl
  389.  swap d0
  390.  move.w d0,TSPTh
  391.  
  392.  move.l #nullspr,d0
  393.  move.w d0,txs0l
  394.  move.w d0,txs1l
  395.  move.w d0,txs2l
  396.  move.w d0,txs3l
  397.  move.w d0,txs4l
  398.  move.w d0,txs5l
  399.  move.w d0,txs6l
  400.  move.w d0,txs7l
  401.  swap d0
  402.  move.w d0,txs0h
  403.  move.w d0,txs1h
  404.  move.w d0,txs2h
  405.  move.w d0,txs3h
  406.  move.w d0,txs4h
  407.  move.w d0,txs5h
  408.  move.w d0,txs6h
  409.  move.w d0,txs7h 
  410.  
  411.  move.l #MEMF_FAST,d1    
  412.  move.l #120000,d0
  413.  move.l 4.w,a6
  414.  jsr -198(a6)
  415.  move.l d0,LEVELDATA
  416.  
  417.  move.l #MEMF_FAST,d1    
  418.  move.l #2*320*256,d0
  419.  move.l 4.w,a6
  420.  jsr -198(a6)
  421.  move.l d0,FASTBUFFER
  422.  
  423.  jsr START
  424.  
  425.  rts
  426.  
  427. FASTBUFFER: dc.l 0
  428. _storeint
  429.     dc.w 0
  430.  
  431. * Load level into buffers.
  432.  clr.b doanything
  433.  clr.b dosounds
  434.  
  435. ; DRAW TEXT SCREEN
  436.  
  437. TWEENTEXT:
  438.  
  439.  move.l #LEVELTEXT,a0
  440.  move.w PLOPT,d0
  441.  muls #82*16,d0
  442.  add.l d0,a0
  443.  
  444.  move.w #14,d7
  445.  move.w #0,d0
  446. DOWNTEXT:
  447.  move.l TEXTSCRN,a1
  448.  jsr DRAWLINEOFTEXT
  449.  addq #1,d0
  450.  add.w #82,a0
  451.  dbra d7,DOWNTEXT
  452.  rts
  453.  
  454. FONTADDRS:
  455.  dc.l ENDFONT0,CHARWIDTHS0
  456.  dc.l ENDFONT1,CHARWIDTHS1
  457.  dc.l ENDFONT2,CHARWIDTHS2
  458.  
  459. ENDFONT0:
  460.  incbin "endfont0"
  461. CHARWIDTHS0:
  462.  incbin "charwidths0"
  463. ENDFONT1:
  464.  incbin "endfont1"
  465. CHARWIDTHS1:
  466.  incbin "charwidths1"
  467. ENDFONT2:
  468.  incbin "endfont2"
  469. CHARWIDTHS2:
  470.  incbin "charwidths2"
  471.  
  472.  even
  473.  
  474. DRAWLINEOFTEXT:
  475.  movem.l d0/a0/d7,-(a7)
  476.  
  477.  muls #80*16,d0
  478.  add.l d0,a1    ; screen pointer
  479.  
  480.  move.l #FONTADDRS,a3
  481.  moveq #0,d0
  482.  move.b (a0)+,d0
  483.  move.l (a3,d0.w*8),a2
  484.  move.l 4(a3,d0.w*8),a3
  485.  
  486.  moveq #0,d1    ; width counter:
  487.  move.w #79,d6
  488.  tst.b (a0)+
  489.  beq.s NOTCENTRED
  490.  moveq #-1,d5
  491.  move.l a0,a4
  492.  moveq #0,d2
  493.  moveq #0,d3
  494.  move.w #79,d0    ; number of chars
  495. .addup:
  496.  addq #1,d5
  497.  move.b (a4)+,d2
  498.  move.b -32(a3,d2.w),d4
  499.  add.w d4,d3
  500.  cmp.b #32,d2
  501.  beq.s .DONTPUTIN
  502.  move.w d5,d6
  503.  move.w d3,d1
  504. .DONTPUTIN:
  505.  dbra d0,.addup
  506.  asr.w #1,d1
  507.  neg.w d1
  508.  add.w #320,d1    ; horiz pos of start x
  509.  
  510. NOTCENTRED:
  511.  move.w d6,d7
  512. DOACHAR:
  513.  moveq #0,d2
  514.  move.b (a0)+,d2
  515.  sub.w #32,d2
  516.  moveq #0,d6
  517.  move.b (a3,d2.w),d6
  518.  asl.w #5,d2
  519.  lea (a2,d2.w),a4    ; char font
  520. val SET 0
  521.  REPT 16
  522.  move.w (a4)+,d0
  523.  bfins d0,val(a1){d1:d6}
  524. val SET val+80
  525.  ENDR
  526.  add.w d6,d1
  527.  dbra d7,DOACHAR
  528.  movem.l (a7)+,d0/a0/d7
  529.  rts 
  530.  
  531.  
  532. CLRTWEENSCRN:
  533.  move.l TEXTSCRN,a0
  534.  move.w #(10240/16)-1,d0
  535.  move.l #$0,d1
  536. .lll
  537.  move.l d1,(a0)+
  538.  move.l d1,(a0)+
  539.  move.l d1,(a0)+
  540.  move.l d1,(a0)+
  541.  move.l d1,(a0)+
  542.  move.l d1,(a0)+
  543.  move.l d1,(a0)+
  544.  move.l d1,(a0)+
  545.  dbra d0,.lll
  546.  rts
  547.  
  548. PLAYTHEGAME:
  549.  
  550.  move.w #0,TXTCOLL
  551.  
  552.  bsr CLRTWEENSCRN
  553.  
  554.  cmp.b #'n',mors
  555.  bne.s .notext
  556.  bsr TWEENTEXT
  557. .notext
  558.  
  559. ;charlie 
  560. ; move.l #TEXTCOP,$dff080
  561.  
  562.  move.w #$10,d0
  563.  move.w #7,d1
  564.  
  565. ;.fdup
  566. ; move.w d0,TXTCOLL
  567. ; add.w #$121,d0
  568. ;.wtframe:
  569. ; btst #5,$dff000+intreqrl
  570. ; beq.s .wtframe
  571. ; move.w #$0020,$dff000+intreq
  572. ; dbra d1,.fdup
  573. ;
  574. ; jsr INITCOPPERSCRN
  575.  
  576. ; Get level memory.
  577.  
  578.  move.l #1,d1
  579.  move.l #50000,d0
  580.  move.l 4.w,a6
  581.  jsr -198(a6)
  582.  move.l d0,LEVELGRAPHICS
  583.  
  584.  move.l #1,d1
  585.  move.l #40000,d0
  586.  move.l 4.w,a6
  587.  jsr -198(a6)
  588.  move.l d0,LEVELCLIPS
  589.  
  590.  move.l #$dff000,a6
  591.  jsr SETPLAYERS
  592.  
  593. ; move.l #LEVELDATAD,LEVELDATA
  594. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  595. ; move.l #LEVELCLIPSD,LEVELCLIPS
  596.  
  597. ; bra noload
  598.  
  599. *********************************
  600.  
  601.  move.l doslib,a6
  602.  move.l #LLname,d1
  603.  move.l #1005,d2
  604.  jsr -30(a6)
  605.  move.l d0,LLhandle
  606.  
  607.  move.l doslib,a6
  608.  move.l d0,d1
  609.  move.l #LINKS,d2
  610.  move.l #10000,d3
  611.  jsr -42(a6)
  612.  
  613.  move.l doslib,a6
  614.  move.l LLhandle,d1
  615.  jsr -36(a6)
  616.  
  617.  ********************************
  618.  
  619.  move.l doslib,a6
  620.  move.l #LLFname,d1
  621.  move.l #1005,d2
  622.  jsr -30(a6)
  623.  move.l d0,LLhandle
  624.  
  625.  move.l doslib,a6
  626.  move.l d0,d1
  627.  move.l #FLYLINKS,d2
  628.  move.l #10000,d3
  629.  jsr -42(a6)
  630.  
  631.  move.l doslib,a6
  632.  move.l LLhandle,d1
  633.  jsr -36(a6)
  634.  
  635.  ********************************
  636.  
  637.  
  638.  move.l doslib,a6
  639.  move.l #LDname,d1
  640.  move.l #1005,d2
  641.  jsr -30(a6)
  642.  move.l d0,LDhandle
  643.  
  644.  move.l doslib,a6
  645.  move.l d0,d1
  646.  move.l LEVELCLIPS,d2
  647.  move.l #40000,d3
  648.  jsr -42(a6)
  649.  
  650.  move.l doslib,a6
  651.  move.l LDhandle,d1
  652.  jsr -36(a6)
  653.  
  654. *************************************
  655.     move.l    LEVELCLIPS,d0
  656.     moveq    #0,d1
  657.     move.l LEVELDATA,a0
  658.     lea    WorkSpace,a1
  659.     lea    $0,a2
  660.     jsr    unLHA
  661. *************************************
  662.  
  663. ********
  664.  
  665.  move.l doslib,a6
  666.  move.l #LGname,d1
  667.  move.l #1005,d2
  668.  jsr -30(a6)
  669.  move.l d0,LGhandle
  670.  
  671.  move.l doslib,a6
  672.  move.l d0,d1
  673.  move.l LEVELCLIPS,d2
  674.  move.l #40000,d3
  675.  jsr -42(a6)
  676.  
  677.  move.l doslib,a6
  678.  move.l LGhandle,d1
  679.  jsr -36(a6)
  680.  
  681. *************************************
  682.     move.l    LEVELCLIPS,d0
  683.     moveq    #0,d1
  684.     move.l LEVELGRAPHICS,a0
  685.     lea    WorkSpace,a1
  686.     lea    $0,a2
  687.     jsr    unLHA
  688. *************************************
  689.  
  690. ********
  691.  
  692.  move.l doslib,a6
  693.  move.l #LCname,d1
  694.  move.l #1005,d2
  695.  jsr -30(a6)
  696.  move.l d0,LChandle
  697.  
  698.  move.l doslib,a6
  699.  move.l d0,d1
  700.  move.l #WorkSpace+16384,d2
  701.  move.l #16000,d3
  702.  jsr -42(a6)
  703.  
  704.  move.l doslib,a6
  705.  move.l LChandle,d1
  706.  jsr -36(a6)
  707.  
  708. *************************************
  709.     move.l    #WorkSpace+16384,d0
  710.     moveq    #0,d1
  711.     move.l LEVELCLIPS,a0
  712.     lea    WorkSpace,a1
  713.     lea    $0,a2
  714.     jsr    unLHA
  715. *************************************
  716.  
  717.  
  718. *******
  719.  
  720. noload:
  721.  
  722. ********
  723.  
  724. ; move.l doslib,a6
  725. ; move.l #Prefsname,d1
  726. ; move.l #1005,d2
  727. ; jsr -30(a6)
  728. ; move.l d0,Prefshandle
  729.  
  730. ; move.l doslib,a6
  731. ; move.l d0,d1
  732. ; move.l #Prefsfile,d2
  733. ; move.l #50,d3
  734. ; jsr -42(a6)
  735.  
  736. ; move.l doslib,a6
  737. ; move.l Prefshandle,d1
  738. ; jsr -36(a6)
  739.  
  740. *******
  741.  
  742.  IFNE CD32VER
  743.  move.l doslib,a6
  744.  move.l #115,d1
  745.  jsr -198(a6)
  746.  ENDC
  747.  
  748.  
  749. ; move.l doslib,d0
  750. ; move.l d0,a1
  751. ; move.l 4.w,a6
  752. ; jsr CloseLib(a6)
  753.  
  754.  move.l #$dff000,a6
  755.  
  756. charlie:
  757. ; jmp  ENDGAMESCROLL
  758.  
  759.     move.w #$87c0,dmacon(a6)
  760.  
  761.     move.w    #%1000000000100000,dmacon(a6)
  762.  
  763. ; move.w intenar(a6),saveinters
  764.     
  765. ;    move.w #%00101111,intena(a6)
  766.  
  767.     move.w #255,adkcon(a6)
  768.  
  769.  
  770. *** Put myself in supervisor mode
  771.  
  772.  bra blag
  773. ; move.l $6c,d0
  774. ; move.l #blag,$6c
  775. ; move.w #$8010,intreq(a6)
  776.  
  777.  rts
  778.  
  779. saveit: ds.l 10
  780. doslibname: dc.b 'dos.library',0
  781.  even
  782. doslib: dc.l 0
  783.  
  784. mors: dc.w 0
  785.  
  786. LDname: dc.b 'ab3:levels/level_'
  787. LEVA:
  788.  dc.b 'a/twolev.bin',0
  789.  even
  790. LDhandle: dc.l 0
  791. LGname: dc.b 'ab3:levels/level_'
  792. LEVB:
  793.  dc.b 'a/twolev.graph.bin',0
  794.  even
  795. LGhandle: dc.l 0
  796. LCname: dc.b 'ab3:levels/level_'
  797. LEVC:
  798.  dc.b 'a/twolev.clips',0
  799.  even
  800. LChandle: dc.l 0
  801. LLname: dc.b 'ab3:levels/level_'
  802. LEVD:
  803.  dc.b 'a/twolev.map',0
  804.  even
  805. LLFname: dc.b 'ab3:levels/level_'
  806. LEVE:
  807.  dc.b 'a/twolev.flymap',0
  808.  even
  809. LLhandle: dc.l 0
  810.  
  811.     cnop    0,4
  812.  
  813. Prefsname: dc.b 'ram:prefs',0
  814.  even
  815. Prefshandle: dc.l 0
  816.  
  817. Prefsfile:
  818.  dc.b 'k4nx'
  819.  ds.b 50
  820.  
  821.  even
  822.  
  823.  cnop 0,4
  824.  
  825. VBLANKInt
  826.  dc.l 0,0
  827.  dc.b NT_INTERRUPT,9
  828.  dc.l Prefsname
  829.  dc.l 0
  830.  dc.l Chan0inter
  831.  
  832.  
  833. KEYInt
  834.  dc.l 0,0
  835.  dc.b NT_INTERRUPT,127
  836.  dc.l Prefsname
  837.  dc.l 0
  838.  dc.l key_interrupt
  839.  
  840.  
  841. blag:
  842.  
  843.  move.l 4.w,a6
  844.  move.l #0,a1
  845.  jsr _LVOFindTask(a6)
  846.  move.l d0,a1
  847.  move.l #6,d0
  848.  
  849.  move.l 4.w,a6
  850.  jsr _LVOSetTaskPri(a6)
  851.  
  852. ; move.w #$10,intreq(a6)
  853. ; move.l d0,$6c
  854. ; move.w #$7fff,intena(a6)
  855.  
  856. ; move.w #$20,$dff1dc
  857.  
  858. ; move.l 4.w,a6
  859. ; lea VBLANKInt(pc),a1
  860. ; moveq #INTB_COPER,d0
  861. ; jsr _LVOAddIntServer(a6)
  862.  
  863.  
  864.  
  865. ****************************
  866. * Initialize level
  867. ****************************
  868. * Poke all clip offsets into
  869. * correct bit of level data.
  870. ****************************
  871.  move.l LEVELGRAPHICS,a0
  872.  move.l 12(a0),a1
  873.  add.l a0,a1
  874.  move.l a1,ZoneGraphAdds
  875.  move.l (a0),a1
  876.  add.l a0,a1
  877.  move.l a1,DoorData
  878.  move.l 4(a0),a1
  879.  add.l a0,a1
  880.  move.l a1,LiftData
  881.  move.l 8(a0),a1
  882.  add.l a0,a1
  883.  move.l a1,SwitchData
  884.  adda.w #16,a0
  885.  move.l a0,ZoneAdds
  886.  
  887.  move.l LEVELDATA,a4
  888.  lea 160*10(a4),a1
  889.  
  890.  lea 54(a1),a2
  891.  move.l a2,CPtPos
  892.  move.w 12(a1),NumCPts
  893.  move.w 14(a1),NumLevPts
  894.  
  895.  move.l 16+6(a1),a2
  896.  add.l a4,a2
  897.  move.l a2,Points
  898.  move.w 8+6(a1),d0
  899.  lea 4(a2,d0.w*4),a2
  900.  move.l a2,PointBrights
  901.  move.w 16(a1),d0
  902.  addq #1,d0
  903.  muls #80,d0
  904.  add.l d0,a2
  905.  move.l a2,ZoneBorderPts
  906.  
  907.  move.l 20+6(a1),a2
  908.  add.l a4,a2
  909.  move.l a2,FloorLines
  910.  move.w -2(a2),ENDZONE
  911.  move.l 24+6(a1),a2
  912.  add.l a4,a2
  913.  move.l a2,ObjectData
  914. *****************************************
  915. * Just for charles
  916.  
  917. ; move.w #$6060,6(a2)
  918. ; move.l #$d0000,8(a2)
  919. ; sub.w #40,4(a2)
  920. ; move.w #45*256+45,14(a2)
  921. ****************************************
  922.  move.l 28+6(a1),a2
  923.  add.l a4,a2
  924.  move.l a2,PlayerShotData
  925.  move.l 32+6(a1),a2
  926.  add.l a4,a2
  927.  move.l a2,NastyShotData
  928.  
  929.  add.l #64*20,a2
  930.  move.l a2,OtherNastyData
  931.  
  932.  move.l 36+6(a1),a2
  933.  add.l a4,a2
  934.  move.l a2,ObjectPoints  
  935.  move.l 40+6(a1),a2
  936.  add.l a4,a2
  937.  move.l a2,PLR1_Obj
  938.  move.l 44+6(a1),a2
  939.  add.l a4,a2
  940.  move.l a2,PLR2_Obj
  941.  move.w 14+6(a1),NumObjectPoints
  942.  
  943. ; bra noclips
  944.   
  945.  move.l LEVELCLIPS,a2
  946.  moveq #0,d0
  947.  move.w 10+6(a1),d7    ;numzones
  948.  move.w d7,NUMZONES
  949. assignclips:
  950.  move.l (a0)+,a3
  951.  add.l a4,a3    ; pointer to a zone
  952.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  953. dowholezone:
  954.  tst.w (a3)
  955.  blt.s nomorethiszone
  956.  tst.w 2(a3)
  957.  blt.s thisonenull
  958.  
  959.  move.l d0,d1
  960.  asr.l #1,d1
  961.  move.w d1,2(a3)
  962.  
  963. findnextclip:
  964.  cmp.w #-2,(a2,d0.l)
  965.  beq.s foundnextclip
  966.  addq.l #2,d0
  967.  bra.s findnextclip
  968. foundnextclip
  969.  addq.l #2,d0
  970.  
  971. thisonenull:
  972.  addq #8,a3 
  973.  bra.s dowholezone
  974. nomorethiszone:
  975.  dbra d7,assignclips
  976.  
  977.  lea (a2,d0.l),a2
  978.  move.l a2,CONNECT_TABLE
  979.  
  980. noclips:
  981.  
  982. * Put in addresses of glowything
  983.  
  984.  
  985. ************************************
  986.  
  987. ; cmp.b #'k',Prefsfile
  988. ; bne.s nkb
  989.  
  990. ;nkb:
  991. ; cmp.b #'m',Prefsfile
  992. ; bne.s nmc
  993. ; clr.b PLR1KEYS
  994. ; clr.b PLR1PATH
  995. ; st PLR1MOUSE
  996. ; clr.b PLR1JOY
  997. ;nmc:
  998. ; cmp.b #'j',Prefsfile
  999. ; bne.s njc
  1000. ; clr.b PLR1KEYS
  1001. ; clr.b PLR1PATH
  1002. ; clr.b PLR1MOUSE
  1003. ; st PLR1JOY
  1004. ;njc:
  1005.  
  1006.  clr.b PLR1_StoodInTop
  1007.  move.l #playerheight,PLR1s_height
  1008.  
  1009.  move.l #empty,pos1LEFT
  1010.  move.l #empty,pos2LEFT
  1011.  move.l #empty,pos1RIGHT
  1012.  move.l #empty,pos2RIGHT
  1013.  move.l #empty,pos0LEFT
  1014.  move.l #empty,pos3LEFT
  1015.  move.l #empty,pos0RIGHT
  1016.  move.l #empty,pos3RIGHT
  1017.  move.l #emptyend,Samp0endLEFT
  1018.  move.l #emptyend,Samp1endLEFT
  1019.  move.l #emptyend,Samp0endRIGHT
  1020.  move.l #emptyend,Samp1endRIGHT
  1021.  move.l #emptyend,Samp2endLEFT
  1022.  move.l #emptyend,Samp3endLEFT
  1023.  move.l #emptyend,Samp2endRIGHT
  1024.  move.l #emptyend,Samp3endRIGHT
  1025.  
  1026.  
  1027.  move.l #nullline,d0
  1028.  move.w d0,n1l
  1029.  swap d0
  1030.  move.w d0,n1h
  1031.  
  1032.  move.l Panel,d0
  1033.  move.w d0,p1l
  1034.  swap d0
  1035.  move.w d0,p1h
  1036.  swap d0
  1037.  add.l #40,d0
  1038.  move.w d0,p2l
  1039.  swap d0
  1040.  move.w d0,p2h
  1041.  swap d0
  1042.  add.l #40,d0
  1043.  move.w d0,p3l
  1044.  swap d0
  1045.  move.w d0,p3h
  1046.  swap d0
  1047.  add.l #40,d0
  1048.  move.w d0,p4l
  1049.  swap d0
  1050.  move.w d0,p4h
  1051.  swap d0
  1052.  add.l #40,d0
  1053.  move.w d0,p5l
  1054.  swap d0
  1055.  move.w d0,p5h
  1056.  swap d0
  1057.  add.l #40,d0
  1058.  move.w d0,p6l
  1059.  swap d0
  1060.  move.w d0,p6h
  1061.  swap d0
  1062.  add.l #40,d0
  1063.  move.w d0,p7l
  1064.  swap d0
  1065.  move.w d0,p7h
  1066.  swap d0
  1067.  add.l #40,d0
  1068.  move.w d0,p8l
  1069.  swap d0
  1070.  move.w d0,p8h
  1071.  
  1072. *******************************
  1073. * TIMER SCREEN SETUP
  1074. ; move.l #TimerScr,d0
  1075. ; move.w d0,p1l
  1076. ; swap d0
  1077. ; move.w d0,p1h
  1078. ; move.w #$1201,Panelcon
  1079.  
  1080.  move.l #borders,d0
  1081.  move.w d0,s0l
  1082.  swap d0
  1083.  move.w d0,s0h
  1084.  move.l #borders+2592,d0
  1085.  move.w d0,s1l
  1086.  swap d0
  1087.  move.w d0,s1h
  1088.  move.l #borders+2592*2,d0
  1089.  move.w d0,s2l
  1090.  swap d0
  1091.  move.w d0,s2h
  1092.  move.l #borders+2592*3,d0
  1093.  move.w d0,s3l
  1094.  swap d0
  1095.  move.w d0,s3h
  1096.  
  1097.  move.l #nullspr,d0
  1098.  move.w d0,s0l
  1099.  move.w d0,s1l
  1100.  move.w d0,s2l
  1101.  move.w d0,s3l
  1102.  
  1103.  move.w d0,s4l
  1104.  move.w d0,s5l
  1105.  move.w d0,s6l
  1106.  move.w d0,s7l
  1107.  swap d0
  1108.  
  1109.  move.w d0,s0h
  1110.  move.w d0,s1h
  1111.  move.w d0,s2h
  1112.  move.w d0,s3h
  1113.  
  1114.  move.w d0,s4h
  1115.  move.w d0,s5h
  1116.  move.w d0,s6h
  1117.  move.w d0,s7h 
  1118.  
  1119.  
  1120.  move.w #52*256+64,borders
  1121.  move.w #212*256+0,borders+8
  1122.  move.w #52*256+64,borders+2592
  1123.  move.w #212*256+128,borders+8+2592
  1124.  move.w #52*256+192,borders+2592*2
  1125.  move.w #212*256+0,borders+8+2592*2
  1126.  move.w #52*256+192,borders+2592*3
  1127.  move.w #212*256+128,borders+8+2592*3
  1128.  
  1129.   
  1130.  
  1131. ; move.l #bigfield,d0
  1132. ; move.w d0,ocl
  1133. ; swap d0
  1134. ; move.w d0,och
  1135.  
  1136.  bset.b #1,$bfe001
  1137.  
  1138. ; jmp stuff
  1139. ;endstuff:
  1140.  
  1141. ; move.w #$00ff,$dff09e
  1142.  
  1143. ; move.l #Blurbfield,$dff080
  1144.  
  1145.  move.w #0,d0
  1146.  
  1147.  
  1148.  
  1149. ****************************
  1150.  jsr INITPLAYER
  1151. ; bsr initobjpos
  1152. ****************************
  1153.  
  1154.  
  1155.  move.l #$dff000,a6
  1156.  
  1157.  move.l #null,$dff0a0
  1158.  move.w #100,$dff0a4
  1159.  move.w #443,$dff0a6
  1160.  move.w #63,$dff0a8
  1161.  
  1162.  move.l #null2,$dff0b0
  1163.  move.w #100,$dff0b4
  1164.  move.w #443,$dff0b6
  1165.  move.w #63,$dff0b8
  1166.  
  1167.  move.l #null4,$dff0c0
  1168.  move.w #100,$dff0c4
  1169.  move.w #443,$dff0c6
  1170.  move.w #63,$dff0c8
  1171.  
  1172.  move.l #null3,$dff0d0
  1173.  move.w #100,$dff0d4
  1174.  move.w #443,$dff0d6
  1175.  move.w #63,$dff0d8
  1176.  
  1177.  move.l #tab,a1
  1178.  move.w #64,d7
  1179.  move.w #0,d6
  1180. outerlop
  1181.  move.l #pretab,a0
  1182.  move.w #255,d5
  1183. scaledownlop:
  1184.  move.b (a0)+,d0
  1185.  ext.w d0
  1186.  ext.l d0
  1187.  muls d6,d0
  1188.  asr.l #6,d0
  1189.  move.b d0,(a1)+
  1190.  dbra d5,scaledownlop
  1191.  addq #1,d6
  1192.  dbra d7,outerlop
  1193.  
  1194.  move.l #$dff000,a6
  1195.  
  1196.  move.w #$c018,intena(a6)
  1197.  
  1198.  move.w #$f,dmacon(a6)
  1199.  move.w #$820f,dmacon(a6)
  1200.  
  1201. ; bsr protinit
  1202.  
  1203.  
  1204. ; move.w #$20,$1dc(a6)
  1205.  
  1206.  move.w #$0,$dff034
  1207.  move.w #0,Conditions
  1208.  
  1209.  cmp.b #'n',mors
  1210.  beq.s .nokeys
  1211.  move.w #%111111111111,Conditions
  1212. .nokeys:
  1213.  
  1214.  move.l #KeyMap,a5
  1215.  clr.b $45(a5)
  1216.  
  1217.  move.l #ingame,mt_data
  1218.  clr.b UseAllChannels
  1219.  
  1220. ; cmp.b #'b',Prefsfile+3
  1221. ; bne.s .noback
  1222. ; jsr mt_init
  1223. ;.noback:
  1224. ;
  1225. ; clr.b CHANNELDATA
  1226. ; clr.b CHANNELDATA+8
  1227. ; clr.b CHANNELDATA+16
  1228. ; clr.b CHANNELDATA+24
  1229. ;
  1230. ; cmp.b #'b',Prefsfile+3
  1231. ; bne.s noreserve
  1232. ;
  1233. ; st CHANNELDATA
  1234. ; st CHANNELDATA+8
  1235. ; st CHANNELDATA+16
  1236. ; st CHANNELDATA+24
  1237. ;noreserve: 
  1238.  
  1239. ; st CHANNELDATA
  1240. ; st CHANNELDATA+8
  1241.  
  1242.  move.l SampleList+6*8,pos0LEFT
  1243.  move.l SampleList+6*8+4,Samp0endLEFT
  1244.  move.l #playerheight,PLR1s_targheight
  1245.  move.l #playerheight,PLR1s_height
  1246.  move.l #playerheight,PLR2s_targheight
  1247.  move.l #playerheight,PLR2s_height
  1248.  
  1249. ; cmp.b #'n',mors
  1250. ; beq.s nohandshake
  1251. ;
  1252. ; move.b #%11011000,$bfd200
  1253. ; move.b #%00010000,$bfd000
  1254. ;waitloop:
  1255. ; btst.b #4,$bfd000
  1256. ; bne.s waitloop
  1257. ; move.b #%11000000,$bfd200
  1258.  
  1259. ;wtmouse:
  1260. ; btst #6,$bfe001
  1261. ; bne.s wtmouse
  1262.  
  1263. ;nohandshake:
  1264.  
  1265. ; jmp end
  1266.  
  1267. ; move.l COPSCRN1,drawpt
  1268. ; move.l COPSCRN2,olddrawpt
  1269.  
  1270.  jsr CLEARKEYBOARD
  1271. ; jsr MAKEBACKROUT
  1272.  
  1273.  clr.b MASTERQUITTING
  1274.  
  1275.  cmp.b #'n',mors
  1276.  seq SLAVEQUITTING
  1277.  
  1278.  move.w #127,PLR2_energy
  1279.  move.w #200,PLAYERONEHEALTH
  1280.  
  1281. ; move.l #ANOTHERSUP,$80
  1282. ; trap #0
  1283. ; rts
  1284. ;
  1285. ;ANOTHERSUP:
  1286.  
  1287. ; move.l $4.w,a6
  1288. ; jsr _LVOSuperState(a6)
  1289. ; move.l d0,SSTACK
  1290.  
  1291. ; CACHE_FREEZE_OFF d2
  1292.  
  1293. ; charlie
  1294. ; DATA_CACHE_ON d2
  1295.  
  1296. ; DataCacheOn
  1297.  
  1298. ; move.l $4.w,a6
  1299. ; move.l SSTACK,d0
  1300. ; jsr _LVOUserState(a6)
  1301.  
  1302.  move.l #0,hitcol
  1303.  
  1304.  cmp.b #'n',mors
  1305.  bne.s NOCLTXT
  1306.  
  1307. ; move.b #0,lastpressed
  1308. ;.wtpress
  1309. ; btst #6,$bfe001
  1310. ; beq.s CLOSETXT
  1311. ; btst #7,$bfe001
  1312. ; beq.s CLOSETXT
  1313. ; tst.b lastpressed
  1314. ; beq.s .wtpress
  1315.  
  1316. CLOSETXT:
  1317.  
  1318.  move.w #$8f8,d0
  1319.  move.w #7,d1
  1320.  
  1321. .fdup
  1322.  move.w d0,TXTCOLL
  1323.  sub.w #$121,d0
  1324. .wtframe:
  1325. ; btst #5,$dff000+intreqrl
  1326. ; beq.s .wtframe
  1327. ; move.w #$0020,$dff000+intreq
  1328.  dbra d1,.fdup
  1329.  
  1330.  move.w #0,TXTCOLL
  1331.  
  1332. NOCLTXT:
  1333.  
  1334.  
  1335.  
  1336.     move.l    4.w,a6
  1337.     jsr    _LVOForbid(a6)
  1338. ;    jsr    _LVODisable(a6)
  1339.  
  1340.  
  1341. ;    move.w    #%0111111111111111,intena+$dff000
  1342. ;    move.w    #%1000000011111111,intena+$dff000
  1343.  
  1344.  
  1345. ;charlie 
  1346. ; move.l #PALETTEBIT,$dff084
  1347. ; move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1348.  
  1349.  
  1350.  clr.b PLR1_Ducked
  1351.  clr.b PLR2_Ducked
  1352.  clr.b p1_ducked
  1353.  clr.b p2_ducked
  1354.  
  1355. ********************************************
  1356.  
  1357. ;    jmp docredits
  1358.  
  1359. ********************************************
  1360.  
  1361.  
  1362.  st doanything
  1363.  st dosounds
  1364.  
  1365.  jsr CLRNASTYMEM
  1366.  
  1367.  move.l #COMPACTMAP,a0
  1368.  move.l a0,LASTZONE
  1369.  move.w #255,d0
  1370. .clrmap
  1371.  move.l #0,(a0)+
  1372.  dbra d0,.clrmap
  1373.  
  1374.  move.l #COMPACTMAP,a0
  1375.  move.l #BIGMAP,a1
  1376.  
  1377.  bra NOALLWALLS
  1378.  
  1379.  move.l ZoneGraphAdds,a2
  1380. DOALLWALLS:
  1381.  move.l (a2),d0
  1382.  beq.s nomorezones
  1383.  move.l d0,a3
  1384.  
  1385.  addq #8,a2
  1386.  
  1387.  add.l LEVELGRAPHICS,a3
  1388.  addq #2,a3
  1389.  move.l a1,a4
  1390.  
  1391. ; DOLOWERROOM
  1392.  
  1393. innerwalls:
  1394.  move.b (a3),d1
  1395.  move.b 1(a3),d0
  1396.  bne doneinner
  1397.  
  1398.  tst.b d1
  1399.  blt noid
  1400.  
  1401.  move.b d1,d3
  1402.  and.w #15,d1
  1403.  
  1404.  moveq #0,d0
  1405.  move.w d1,d2
  1406.  add.w d1,d1
  1407.  add.w d2,d1
  1408.  addq #1,d1
  1409.  bset d1,d0
  1410.  btst #4,d3
  1411.  beq.s .nodoor
  1412.  addq #1,d1
  1413.  bset d1,d0
  1414. .nodoor
  1415.  
  1416.  or.l d0,(a0)
  1417.  
  1418.  move.w 2(a3),(a4)
  1419.  move.w 4(a3),2(a4)
  1420.  
  1421. noid:
  1422.  
  1423.  add.w #30,a3
  1424.  addq #4,a4
  1425.  
  1426.  bra innerwalls
  1427.  
  1428. doneinner:
  1429.  
  1430.  add.w #40,a1
  1431.  addq #4,a0
  1432.  
  1433.  bra DOALLWALLS
  1434. nomorezones:
  1435.  
  1436. NOALLWALLS
  1437.  
  1438.  move.w #96,MIDDLEX
  1439.  move.w #192,RIGHTX
  1440.  move.w #160,BOTTOMY
  1441.  move.w #80,TOTHEMIDDLE
  1442.  clr.b FULLSCR
  1443.  st PLAYERONEGUNS+1
  1444. **************************************
  1445.  clr.b PLR1KEYS
  1446.  clr.b PLR1PATH
  1447.  st PLR1MOUSE
  1448.  clr.b PLR1JOY
  1449. **************************************
  1450. lop:
  1451.  
  1452.  move.b FULLSCRTEMP,d0
  1453.  move.b FULLSCR,d1
  1454.  eor.b d1,d0
  1455.  beq.s .notswapscr2
  1456.  
  1457.  move.b FULLSCRTEMP,FULLSCR
  1458.  beq.s .notswapscr3
  1459.  
  1460.  move.w #144,MIDDLEX
  1461.  move.w #288,RIGHTX
  1462.  move.w #232,BOTTOMY
  1463.  move.w #120,TOTHEMIDDLE
  1464.  move.l SCRNSHOWPT,a0
  1465.  jsr WIPEDISPLAY
  1466.  move.l SCRNDRAWPT,a0
  1467.  jsr WIPEDISPLAY
  1468.  
  1469.  bra.s .notswapscr2
  1470.  
  1471. .notswapscr3:
  1472.  move.w #96,MIDDLEX
  1473.  move.w #192,RIGHTX
  1474.  move.w #160,BOTTOMY
  1475.  move.w #80,TOTHEMIDDLE
  1476.  move.l SCRNSHOWPT,a0
  1477.  jsr WIPEDISPLAY
  1478.  move.l SCRNDRAWPT,a0
  1479.  jsr WIPEDISPLAY
  1480. .notswapscr2:
  1481.  
  1482.  
  1483.  btst #6,$bfe001
  1484. ;charlie bne.b .nocop
  1485.  
  1486. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1487.  
  1488. .nocop
  1489.  
  1490.  move.l #KeyMap,a5
  1491.  
  1492.  cmp.b #'n',mors
  1493.  bne .nopause
  1494.  tst.b $19(a5)
  1495.  bra .nopause
  1496.  beq.s .nopause
  1497.  clr.b doanything
  1498.  
  1499. .waitrel:
  1500.  
  1501.  tst.b PLR1JOY
  1502.  beq.s .NOJOY
  1503.  jsr _ReadJoy1
  1504. .NOJOY
  1505.  
  1506.  tst.b $19(a5)
  1507.  bne.s .waitrel
  1508.  
  1509.  bsr PAUSEOPTS
  1510.  
  1511.  
  1512.  st doanything
  1513. .nopause: 
  1514.  
  1515.  move.l hitcol,d0
  1516.  move.l d0,d1
  1517.  add.l #PALETTEBIT,d1
  1518.  tst.l d0
  1519.  beq.s nofadedownhc
  1520.  sub.l #2116,d0
  1521.  move.l d0,hitcol
  1522. nofadedownhc:
  1523.  
  1524.  move.l d1,a0
  1525.  move.l #PALETTESPACE,a1
  1526.  move.l #(2116/4)-2,d0
  1527. putinpal:
  1528.  move.l (a0)+,(a1)+
  1529.  dbra d0,putinpal
  1530.  
  1531.  st READCONTROLS
  1532.  move.l #$dff000,a6
  1533.  
  1534.  
  1535.  cmp.b #'n',mors
  1536.  beq .nopause
  1537.  
  1538.  move.b SLAVEPAUSE,d0
  1539.  or.b MASTERPAUSE,d0
  1540.  beq.s .nopause
  1541.  clr.b doanything
  1542.  
  1543.  move.l #KeyMap,a5
  1544. .waitrel:
  1545.  
  1546.  
  1547.  cmp.b #'s',mors
  1548.  beq.s .RE2
  1549.  tst.b PLR1JOY
  1550.  beq.s .NOJOY
  1551.  jsr _ReadJoy1
  1552.  bra .RE1
  1553. .RE2:
  1554.  tst.b PLR2JOY
  1555.  beq.s .NOJOY
  1556.  jsr _ReadJoy2
  1557. .RE1
  1558. .NOJOY:
  1559.  tst.b $19(a5)
  1560.  bne.s .waitrel
  1561.  
  1562.  bsr PAUSEOPTS
  1563.  
  1564.  cmp.b #'m',mors
  1565.  bne.s .slavelast
  1566.  Jsr SENDFIRST
  1567.  bra .masfirst
  1568. .slavelast
  1569.  Jsr RECFIRST
  1570. .masfirst:
  1571.  clr.b SLAVEPAUSE
  1572.  clr.b MASTERPAUSE
  1573.  st doanything
  1574.  
  1575. .nopause: 
  1576.  
  1577.  movem.l d0-d7/a0-a6,-(a7)
  1578.  move.w #256,COPIEDPAL
  1579.  move.w #0,COPIEDPAL+2
  1580. LOOKFORME:
  1581.  move.l MyScreen,a0
  1582.  lea sc_ViewPort(a0),a0
  1583.  move.l #COPIEDPAL,a1
  1584.  move.l _GfxBase,a6
  1585.  jsr -$372(a6)
  1586.  movem.l (a7)+,d0-d7/a0-a6
  1587.  
  1588.  move.l BMPtr,d0
  1589.  move.l BMPtr2,BMPtr
  1590.  move.l d0,BMPtr2
  1591.  
  1592.  move.l BMPtr2,a1
  1593.  
  1594.  move.l MyScreen,a0
  1595.  
  1596.  
  1597.  lea sc_RastPort(a0),a2
  1598.  move.l a1,rp_BitMap(a2)
  1599.  move.l rp_BitMap(a2),a2
  1600.  lea sc_ViewPort(a0),a0
  1601.  move.l vp_RasInfo(a0),a0
  1602.  move.l a1,ri_BitMap(a0)
  1603.  
  1604.  move.l MyScreen,a0
  1605.  lea sc_BitMap(a0),a0
  1606.  addq #8,a1
  1607.  move.l (a1)+,(a0)+
  1608.  move.l (a1)+,(a0)+
  1609.  move.l (a1)+,(a0)+
  1610.  move.l (a1)+,(a0)+
  1611.  move.l (a1)+,(a0)+
  1612.  move.l (a1)+,(a0)+
  1613.  move.l (a1)+,(a0)+
  1614.  move.l (a1)+,(a0)+
  1615.  
  1616.  move.l MyScreen,a0
  1617.  move.l _IntuitionBase,a6
  1618.  jsr _LVOMakeScreen(a6)
  1619.  
  1620.  move.l _IntuitionBase,a6
  1621.  jsr _LVORethinkDisplay(a6)
  1622.  
  1623. ; move.l drawpt,d0
  1624. ; move.l olddrawpt,drawpt
  1625. ; move.l d0,olddrawpt
  1626.  
  1627.  move.l SCRNDRAWPT,d0
  1628.  move.l SCRNSHOWPT,SCRNDRAWPT
  1629.  move.l d0,SCRNSHOWPT
  1630.  
  1631. ; move.l d0,$dff084    
  1632.  move.l drawpt,a3
  1633. ; move.l COPSCRNBUFF,a3
  1634.  adda.w #10,a3
  1635.  move.l a3,frompt
  1636.  add.l #104*4*40,a3
  1637.  move.l a3,midpt
  1638.  
  1639.  cmp.b #'s',mors
  1640.  beq.s nowaitslave
  1641.  
  1642. waitfortop:
  1643.  
  1644. ; btst.b #0,intreqrl(a6)
  1645. ; beq.b waitfortop
  1646.  
  1647. ; move.w #$1,intreq(a6)
  1648.  move.l #PLR1_GunData,GunData
  1649.  move.b PLR1_GunSelected,GunSelected
  1650.  bra waitmaster
  1651.  
  1652. nowaitslave:
  1653.  move.l #PLR2_GunData,GunData
  1654.  move.b PLR2_GunSelected,GunSelected
  1655. waitmaster:
  1656.  
  1657.  move.l #SMIDDLEY,a0
  1658.  movem.l (a0)+,d0/d1
  1659.  move.l d0,MIDDLEY
  1660.  move.l d1,MIDDLEY+4
  1661.  
  1662.  move.l waterpt,a0
  1663.  move.l (a0)+,watertouse
  1664.  cmp.l #endwaterlist,a0
  1665.  blt.s okwat
  1666.  move.l #waterlist,a0
  1667. okwat:
  1668.  move.l a0,waterpt
  1669.  
  1670.  add.w #640,wtan
  1671.  and.w #8191,wtan
  1672.  add.l #1,wateroff
  1673.  and.l #$3fff3fff,wateroff
  1674.  
  1675.  moveq #0,d0
  1676.  move.b GunSelected,d0
  1677.  move.l LINKFILE,a6
  1678.  add.l #GunBulletTypes,a6
  1679.  move.w (a6,d0.w*8),d0
  1680.  
  1681.  move.l #PLAYERONEAMMO,a6
  1682.  move.w (a6,d0.w*2),d0
  1683.  move.w d0,Ammo
  1684.  
  1685.  move.l PLR1_xoff,OLDX1
  1686.  move.l PLR1_zoff,OLDZ1
  1687.  move.l PLR2_xoff,OLDX2
  1688.  move.l PLR2_zoff,OLDZ2
  1689.  
  1690.  move.l #$dff000,a6
  1691.  
  1692.  cmp.b #'s',mors
  1693.  beq ASlaveShouldWaitOnHisMaster
  1694.  
  1695.  cmp.b #'n',mors
  1696.  bne NotOnePlayer
  1697.  
  1698.  move.w PLAYERONEHEALTH,Energy
  1699.  move.w FramesToDraw,TempFrames
  1700.  cmp.w #15,TempFrames
  1701.  blt.s .okframe
  1702.  move.w #15,TempFrames
  1703. .okframe:
  1704.  move.w #0,FramesToDraw
  1705.  
  1706. *********************************************
  1707. *********** TAKE THIS OUT *******************
  1708. *********************************************
  1709.  
  1710.  move.l CHEATPTR,a4
  1711.  add.l #200000,a4
  1712.  moveq #0,d0
  1713.  move.b (a4),d0
  1714.  
  1715.  move.l #KeyMap,a5
  1716.  tst.b (a5,d0.w)
  1717.  beq.s .nocheat
  1718.  
  1719.  addq #1,a4
  1720.  cmp.l #ENDCHEAT,a4
  1721.  blt.s .nocheat
  1722.  cmp.w #0,CHEATNUM
  1723.  beq.s .nocheat
  1724.  sub.w #1,CHEATNUM
  1725.  move.l #CHEATFRAME,a4
  1726.  move.w #127,PLR1_energy
  1727.  jsr EnergyBar
  1728. .nocheat
  1729.  
  1730.  sub.l #200000,a4
  1731.  move.l a4,CHEATPTR
  1732.  
  1733. **********************************************
  1734. **********************************************
  1735. **********************************************
  1736.  
  1737.  move.l PLR1s_xoff,p1_xoff
  1738.  move.l PLR1s_zoff,p1_zoff
  1739.  move.l PLR1s_yoff,p1_yoff
  1740.  move.l PLR1s_height,p1_height
  1741.  move.w PLR1s_angpos,p1_angpos
  1742.  move.w PLR1_bobble,p1_bobble
  1743.  move.b PLR1_clicked,p1_clicked
  1744.  move.b PLR1_fire,p1_fire
  1745.  clr.b PLR1_clicked
  1746.  move.b PLR1_SPCTAP,p1_spctap
  1747.  clr.b PLR1_SPCTAP
  1748.  move.b PLR1_Ducked,p1_ducked
  1749.  move.b PLR1_GunSelected,p1_gunselected
  1750.  
  1751.  bsr PLR1_Control
  1752.  
  1753.  move.l PLR1_Roompt,a0
  1754.  move.l ToZoneRoof(a0),SplitHeight
  1755.  move.w p1_xoff,THISPLRxoff
  1756.  move.w p1_zoff,THISPLRzoff
  1757.  
  1758.  
  1759.  move.l #$60000,p2_yoff
  1760.  move.l PLR2_Obj,a0
  1761.  move.w #-1,GraphicRoom(a0)
  1762.  move.w #-1,12(a0)
  1763.  move.b #0,17(a0)
  1764.  move.l #BollocksRoom,PLR2_Roompt
  1765.  
  1766.  bra donetalking
  1767.  
  1768. NotOnePlayer:
  1769.  move.l #KeyMap,a5
  1770.  tst.b $19(a5)
  1771.  sne MASTERPAUSE
  1772.  
  1773. *********************************
  1774.  move.w PLAYERONEHEALTH,Energy
  1775. ; change this back
  1776. *********************************
  1777.  
  1778.  jsr SENDFIRST
  1779.  
  1780.  move.w FramesToDraw,TempFrames
  1781.  cmp.w #15,TempFrames
  1782.  blt.s .okframe
  1783.  move.w #15,TempFrames
  1784. .okframe:
  1785.  move.w #0,FramesToDraw
  1786.  
  1787.  move.l PLR1s_xoff,p1_xoff
  1788.  move.l PLR1s_zoff,p1_zoff
  1789.  move.l PLR1s_yoff,p1_yoff
  1790.  move.l PLR1s_height,p1_height
  1791.  move.w PLR1s_angpos,p1_angpos
  1792.  move.w PLR1_bobble,p1_bobble
  1793.  move.b PLR1_clicked,p1_clicked
  1794.  clr.b PLR1_clicked
  1795.  move.b PLR1_fire,p1_fire
  1796.  move.b PLR1_SPCTAP,p1_spctap
  1797.  clr.b PLR1_SPCTAP
  1798.  move.b PLR1_Ducked,p1_ducked
  1799.  move.b PLR1_GunSelected,p1_gunselected
  1800.  
  1801.  move.l p1_xoff,d0
  1802.  jsr SENDFIRST
  1803.  move.l d0,p2_xoff
  1804.  
  1805.  move.l p1_zoff,d0
  1806.  jsr SENDFIRST
  1807.  move.l d0,p2_zoff 
  1808.  
  1809.  move.l p1_yoff,d0
  1810.  jsr SENDFIRST
  1811.  move.l d0,p2_yoff
  1812.   
  1813.  move.l p1_height,d0
  1814.  jsr SENDFIRST
  1815.  move.l d0,p2_height
  1816.  
  1817.  move.w p1_angpos,d0
  1818.  swap d0
  1819.  move.w p1_bobble,d0
  1820.  jsr SENDFIRST
  1821.  move.w d0,p2_bobble
  1822.  swap d0
  1823.  move.w d0,p2_angpos
  1824.  
  1825.  
  1826.  move.w TempFrames,d0
  1827.  swap d0
  1828.  move.b p1_spctap,d0
  1829.  lsl.w #8,d0
  1830.  move.b p1_clicked,d0
  1831.  jsr SENDFIRST
  1832.  move.b d0,p2_clicked
  1833.  lsr.w #8,d0
  1834.  move.b d0,p2_spctap
  1835.  
  1836.  
  1837.  move.w Rand1,d0
  1838.  swap d0
  1839.  move.b p1_ducked,d0
  1840.  lsl.w #8,d0
  1841.  move.b p1_gunselected,d0
  1842.  jsr SENDFIRST
  1843.  move.b d0,p2_gunselected
  1844.  lsr.w #8,d0
  1845.  move.b d0,p2_ducked
  1846.  
  1847.  move.b p1_fire,d0
  1848.  lsl.w #8,d0
  1849.  move.b MASTERQUITTING,d0
  1850.  or.b d0,SLAVEQUITTING
  1851.  swap d0
  1852.  move.b MASTERPAUSE,d0
  1853.  or.b d0,SLAVEPAUSE
  1854.  jsr SENDFIRST
  1855.  or.b d0,MASTERPAUSE
  1856.  or.b d0,SLAVEPAUSE
  1857.  swap d0
  1858.  or.b d0,SLAVEQUITTING
  1859.  or.b d0,MASTERQUITTING
  1860.  lsr.w #8,d0
  1861.  move.b d0,p2_fire
  1862.  
  1863.  bsr PLR1_Control
  1864.  bsr PLR2_Control
  1865.  move.l PLR1_Roompt,a0
  1866.  move.l ToZoneRoof(a0),SplitHeight
  1867.  move.w p1_xoff,THISPLRxoff
  1868.  move.w p1_zoff,THISPLRzoff
  1869.  
  1870.  bra donetalking
  1871.  
  1872. ASlaveShouldWaitOnHisMaster:
  1873.  
  1874.  move.l #KeyMap,a5
  1875.  tst.b $19(a5)
  1876.  sne SLAVEPAUSE
  1877.  
  1878.  
  1879.  move.w PLR2_energy,Energy
  1880.  
  1881.  jsr RECFIRST
  1882.  
  1883.  move.l PLR2s_xoff,p2_xoff
  1884.  move.l PLR2s_zoff,p2_zoff
  1885.  move.l PLR2s_yoff,p2_yoff
  1886.  move.l PLR2s_height,p2_height
  1887.  move.w PLR2s_angpos,p2_angpos
  1888.  move.w PLR2_bobble,p2_bobble
  1889.  move.b PLR2_clicked,p2_clicked
  1890.  clr.b PLR2_clicked
  1891.  move.b PLR2_fire,p2_fire
  1892.  move.b PLR2_SPCTAP,p2_spctap
  1893.  clr.b PLR2_SPCTAP
  1894.  move.b PLR2_Ducked,p2_ducked
  1895.  move.b PLR2_GunSelected,p2_gunselected
  1896.  
  1897.  move.l p2_xoff,d0
  1898.  jsr RECFIRST
  1899.  move.l d0,p1_xoff
  1900.  
  1901.  move.l p2_zoff,d0
  1902.  jsr RECFIRST
  1903.  move.l d0,p1_zoff
  1904.  
  1905.  move.l p2_yoff,d0
  1906.  jsr RECFIRST
  1907.  move.l d0,p1_yoff
  1908.  
  1909.  move.l p2_height,d0
  1910.  jsr RECFIRST
  1911.  move.l d0,p1_height
  1912.  
  1913.  move.w p2_angpos,d0
  1914.  swap d0
  1915.  move.w p2_bobble,d0
  1916.  jsr RECFIRST
  1917.  move.w d0,p1_bobble
  1918.  swap d0
  1919.  move.w d0,p1_angpos
  1920.  
  1921.  
  1922.  move.b p2_spctap,d0
  1923.  lsl.w #8,d0
  1924.  move.b p2_clicked,d0
  1925.  jsr RECFIRST
  1926.  move.b d0,p1_clicked
  1927.  lsr.w #8,d0
  1928.  move.b d0,p1_spctap
  1929.  swap d0
  1930.  move.w d0,TempFrames
  1931.  
  1932.  
  1933.  move.b p2_ducked,d0
  1934.  lsl.w #8,d0
  1935.  move.b p2_gunselected,d0
  1936.  jsr RECFIRST
  1937.  move.b d0,p1_gunselected
  1938.  lsr.w #8,d0
  1939.  move.b d0,p1_ducked
  1940.  swap d0
  1941.  move.w d0,Rand1
  1942.  
  1943.  move.b p2_fire,d0
  1944.  lsl.w #8,d0
  1945.  move.b SLAVEQUITTING,d0
  1946.  or.b d0,MASTERQUITTING
  1947.  swap d0
  1948.  move.b SLAVEPAUSE,d0
  1949.  or.b d0,MASTERPAUSE
  1950.  jsr RECFIRST
  1951.  or.b d0,MASTERPAUSE
  1952.  or.b d0,SLAVEPAUSE
  1953.  swap d0
  1954.  or.b d0,SLAVEQUITTING
  1955.  or.b d0,MASTERQUITTING
  1956.  lsr.w #8,d0
  1957.  move.b d0,p1_fire
  1958.  
  1959.  
  1960.  bsr PLR1_Control
  1961.  bsr PLR2_Control
  1962.  move.w p2_xoff,THISPLRxoff
  1963.  move.w p2_zoff,THISPLRzoff
  1964.  move.l PLR2_Roompt,a0
  1965.  move.l ToZoneRoof(a0),SplitHeight
  1966.  
  1967. donetalking:
  1968.  
  1969.  
  1970.  
  1971.  move.l #ZoneBrightTable,a1
  1972.  move.l ZoneAdds,a2
  1973.  move.l PLR2_ListOfGraphRooms,a0
  1974. ; move.l PLR2_PointsToRotatePtr,a5
  1975.  move.l a0,a5
  1976.  cmp.b #'s',mors
  1977.  beq.s doallz
  1978.  move.l PLR1_ListOfGraphRooms,a0
  1979. ; move.l PLR1_PointsToRotatePtr,a5
  1980.  move.l a0,a5 
  1981. doallz
  1982.  move.w (a0),d0
  1983.  blt.s doneallz
  1984.  add.w #8,a0
  1985.  
  1986.  move.l (a2,d0.w*4),a3
  1987.  add.l LEVELDATA,a3
  1988.  move.w ToZoneBrightness(a3),d2
  1989.  
  1990.  blt.s justbright
  1991.  move.w d2,d3
  1992.  lsr.w #8,d3
  1993.  tst.b d3
  1994.  beq.s justbright
  1995.  
  1996.  move.l #BrightAnimTable,a4
  1997.  move.w -2(a4,d3.w*2),d2
  1998.  
  1999. justbright:
  2000.  muls #32,d2
  2001.  divs #20,d2
  2002.  move.w d2,(a1,d0.w*4)
  2003.  
  2004.  move.w ToUpperBrightness(a3),d2
  2005.  
  2006.  blt.s justbright2
  2007.  move.w d2,d3
  2008.  lsr.w #8,d3
  2009.  tst.b d3
  2010.  beq.s justbright2
  2011.  
  2012.  move.l #BrightAnimTable,a4
  2013.  move.w -2(a4,d3.w*2),d2
  2014.  
  2015. justbright2:
  2016.  
  2017.  muls #32,d2
  2018.  divs #20,d2
  2019.  move.w d2,2(a1,d0.w*4)
  2020.  
  2021.  bra doallz
  2022.  
  2023. doneallz:
  2024.  
  2025.  move.l PointBrights,a2
  2026.  move.l #CurrentPointBrights,a3
  2027. justtheone:
  2028.  move.w (a5),d0
  2029.  blt whythehell
  2030.  addq #8,a5
  2031.  
  2032.  muls #40,d0
  2033.  
  2034.  move.w #39,d7
  2035.  
  2036. allinzone:
  2037.  move.w (a2,d0.w*2),d2
  2038.  
  2039.  tst.b d2
  2040.  blt.s .justbright
  2041.  move.w d2,d3
  2042.  lsr.w #8,d3
  2043.  tst.b d3
  2044.  beq.s .justbright
  2045.  
  2046.  move.w d3,d4
  2047.  and.w #$f,d3
  2048.  lsr.w #4,d4
  2049.  add.w #1,d4
  2050.  move.l #BrightAnimTable,a0
  2051.  move.w -2(a0,d3.w*2),d3
  2052.  ext.w d2
  2053.  sub.w d2,d3
  2054.  muls d4,d3
  2055.  asr.w #4,d3
  2056.  add.w d3,d2
  2057.  
  2058. .justbright:
  2059.  ext.w d2
  2060.  
  2061.  muls #31,d2
  2062.  divs #20,d2
  2063.  bge.s .itspos
  2064.  sub.w #600,d2
  2065. .itspos:
  2066.  add.w #300,d2
  2067.  
  2068.  move.w d2,(a3,d0.w*2)
  2069.  addq #1,d0
  2070.  dbra d7,allinzone
  2071.  
  2072.  bra justtheone
  2073.  
  2074. whythehell:
  2075.  
  2076.  move.l PLR1_Roompt,a0
  2077.  move.l #CurrentPointBrights,a1
  2078.  move.l ZoneBorderPts,a2
  2079.  move.w (a0),d0
  2080.  muls #10,d0
  2081.  lea (a2,d0.w*2),a2
  2082.  lea (a1,d0.w*8),a1
  2083.  
  2084.  moveq #9,d7
  2085.  moveq #0,d0
  2086.  moveq #0,d1
  2087. findaverage:
  2088.  tst.w (a2)+
  2089.  blt.s .foundaverage
  2090.  addq #1,d0
  2091.  move.w (a1)+,d2
  2092.  bge.s .okpos
  2093.  neg.w d2
  2094. .okpos:
  2095.  add.w d2,d1
  2096.  
  2097.  dbra d7,findaverage
  2098.  
  2099. .foundaverage:
  2100.  
  2101.  ext.l d1
  2102.  divs d0,d1
  2103.  sub.w #300,d1
  2104.  move.w d1,PLR1_RoomBright
  2105.  
  2106.  cmp.b #'n',mors
  2107.  beq nosee
  2108.  
  2109.  move.l PLR1_Roompt,FromRoom
  2110.  move.l PLR2_Roompt,ToRoom
  2111.  move.w p1_xoff,Viewerx
  2112.  move.w p1_zoff,Viewerz
  2113.  move.l p1_yoff,d0
  2114.  asr.l #7,d0
  2115.  move.w d0,Viewery
  2116.  move.w p2_xoff,Targetx
  2117.  move.w p2_zoff,Targetz
  2118.  move.l p2_yoff,d0
  2119.  asr.l #7,d0
  2120.  move.w d0,Targety
  2121.  move.b PLR1_StoodInTop,ViewerTop
  2122.  move.b PLR2_StoodInTop,TargetTop
  2123.  jsr CanItBeSeen
  2124.  
  2125.  move.l PLR1_Obj,a0
  2126.  move.b CanSee,d0
  2127.  and.b #2,d0
  2128.  move.b d0,17(a0)
  2129.  move.l PLR2_Obj,a0
  2130.  move.b CanSee,d0
  2131.  and.b #1,d0
  2132.  move.b d0,17(a0)
  2133.  
  2134. nosee:
  2135.  
  2136.  move.l PLR1_Obj,a0
  2137.  move.b #5,16(a0)
  2138.  move.l PLR2_Obj,a0
  2139.  move.b #11,16(a0)
  2140.  
  2141.  move.w TempFrames,d0
  2142.  add.w d0,p1_holddown
  2143.  cmp.w #30,p1_holddown
  2144.  blt.s oklength
  2145.  move.w #30,p1_holddown
  2146. oklength:
  2147.  
  2148.  tst.b p1_fire
  2149.  bne.s okstillheld
  2150.  sub.w d0,p1_holddown
  2151.  bge.s okstillheld
  2152.  move.w #0,p1_holddown
  2153.  
  2154. okstillheld:
  2155.  
  2156.  move.w TempFrames,d0
  2157.  add.w d0,p2_holddown
  2158.  
  2159.  cmp.w #30,p2_holddown
  2160.  blt.s oklength2
  2161.  move.w #30,p2_holddown
  2162. oklength2:
  2163.  
  2164.  
  2165.  tst.b p2_fire
  2166.  bne.s okstillheld2
  2167.  sub.w d0,p2_holddown
  2168.  bge.s okstillheld2
  2169.  move.w #0,p2_holddown
  2170. okstillheld2:
  2171.  
  2172. ***** CHECKING LIGHT *********
  2173.  
  2174. ; move.w #-20,d0
  2175. ; move.w PLR1_xoff,d1
  2176. ; move.w PLR1_zoff,d2
  2177. ; move.l PLR1_Roompt,a0
  2178. ; move.w (a0),d3
  2179. ; move.w PLR1_angpos,d4
  2180. ;
  2181. ; jsr BRIGHTENPOINTSANGLE
  2182.  
  2183. ******************************
  2184.  
  2185. ; move.l #PLR1_GunData,a1
  2186. ; move.w p1_holddown,d0
  2187. ; move.w #50,10+32*3(a1)
  2188. ; move.l #PLR2_GunData,a1
  2189. ; move.w p2_holddown,d0
  2190. ; move.w #50,10+32*3(a1)
  2191.  
  2192. ******************************************
  2193. ******************************************
  2194.  
  2195.  move.w TempFrames,d1
  2196.  bgt.s noze
  2197.  moveq #1,d1
  2198. noze:
  2199.  
  2200.  move.w PLR1_xoff,d0
  2201.  sub.w OLDX1,d0
  2202.  asl.w #4,d0
  2203.  ext.l d0
  2204.  divs d1,d0
  2205.  move.w d0,XDIFF1
  2206.  move.w PLR2_xoff,d0
  2207.  sub.w OLDX2,d0
  2208.  asl.w #4,d0
  2209.  ext.l d0
  2210.  divs d1,d0
  2211.  move.w d0,XDIFF2
  2212.  move.w PLR1_zoff,d0
  2213.  sub.w OLDZ1,d0
  2214.  asl.w #4,d0
  2215.  ext.l d0
  2216.  divs d1,d0
  2217.  move.w d0,ZDIFF1
  2218.  move.w PLR2_zoff,d0
  2219.  sub.w OLDZ2,d0
  2220.  asl.w #4,d0
  2221.  ext.l d0
  2222.  divs d1,d0
  2223.  move.w d0,ZDIFF2
  2224.  
  2225.  cmp.b #'s',mors
  2226.  beq.s ImPlayer2OhYesIAm
  2227.  bsr USEPLR1
  2228.  bra IWasPlayer1
  2229.  
  2230. ImPlayer2OhYesIAm:
  2231.  bsr USEPLR2
  2232. IWasPlayer1:
  2233.  
  2234.  
  2235.  cmp.b #'s',mors
  2236.  beq drawplayer2
  2237.  
  2238.  move.w #0,scaleval
  2239.  
  2240.  move.l PLR1_xoff,xoff
  2241.  move.l PLR1_yoff,yoff
  2242.  move.l PLR1_zoff,zoff
  2243.  move.w PLR1_angpos,angpos
  2244.  move.w PLR1_cosval,cosval
  2245.  move.w PLR1_sinval,sinval
  2246.  
  2247.  
  2248.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2249.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2250.  move.l PLR1_Roompt,Roompt
  2251.  
  2252.  bsr OrderZones
  2253.  jsr objmoveanim
  2254.  jsr EnergyBar
  2255.  jsr AmmoBar
  2256.  
  2257. ;********************************************
  2258. ;************* Do reflection ****************
  2259. ;
  2260. ; move.l ListOfGraphRooms,a0
  2261. ; move.l ZoneAdds,a1
  2262. ;checkwaterheights
  2263. ; move.w (a0),d0
  2264. ; blt allzonesdone
  2265. ; addq #8,a0
  2266. ; move.l (a1,d0.w*4),a2
  2267. ; add.l LEVELDATA,a2
  2268. ; move.l ToZoneWater(a2),d0
  2269. ; cmp.l ToZoneFloor(a2),d0
  2270. ; blt.s WEHAVEAHEIGHT
  2271. ; bra.s checkwaterheights
  2272. ;
  2273. ;WEHAVEAHEIGHT:
  2274. ;
  2275. ; sub.l yoff,d0
  2276. ; blt.s underwater
  2277. ; add.l d0,d0
  2278. ; add.l d0,yoff
  2279. ; move.l FASTBUFFER2,FASTBUFFER
  2280. ; move.w #0,leftclip
  2281. ; move.w RIGHTX,rightclip
  2282. ; move.w #0,deftopclip
  2283. ; move.w #BOTTOMY/2,defbotclip
  2284. ; move.w #0,topclip
  2285. ; move.w #BOTTOMY/2,botclip
  2286. ;
  2287. ; clr.b DOANYWATER 
  2288. ; bsr DrawDisplay
  2289. ;allzonesdone:
  2290. ;underwater:
  2291.  
  2292. ********************************************
  2293.  
  2294.  st DOANYWATER
  2295.  
  2296.  move.l PLR1_yoff,yoff
  2297.  
  2298.  move.w #0,leftclip
  2299.  move.w RIGHTX,rightclip
  2300.  move.w #0,deftopclip
  2301.  move.w WIDESCRN,d0
  2302.  add.w d0,deftopclip
  2303.  
  2304.  move.w BOTTOMY,defbotclip
  2305.  sub.w d0,defbotclip
  2306.  move.w #0,topclip
  2307.  add.w d0,topclip
  2308.  move.w BOTTOMY,botclip
  2309.  sub.w d0,botclip
  2310. ; sub.l #10*104*4,frompt
  2311. ; sub.l #10*104*4,midpt
  2312.  
  2313. * Subroom loop
  2314.  
  2315.  bsr DrawDisplay 
  2316.  
  2317.  bra nodrawp2
  2318.  
  2319. drawplayer2
  2320.  
  2321.  move.w #0,scaleval
  2322.  move.l PLR2_xoff,xoff
  2323.  move.l PLR2_yoff,yoff
  2324.  move.l PLR2_zoff,zoff
  2325.  move.w PLR2_angpos,angpos
  2326.  move.w PLR2_cosval,cosval
  2327.  move.w PLR2_sinval,sinval 
  2328.  
  2329.  
  2330.  
  2331.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2332.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2333.  move.l PLR2_Roompt,Roompt
  2334.  
  2335.  
  2336.  bsr OrderZones
  2337.  jsr objmoveanim
  2338.  jsr EnergyBar
  2339.  jsr AmmoBar
  2340.  
  2341.  move.w WIDESCRN,d0
  2342.  
  2343.  move.w #0,leftclip
  2344.  move.w RIGHTX,rightclip
  2345.  move.w #0,deftopclip
  2346.  add.w d0,deftopclip
  2347.  move.w BOTTOMY,defbotclip
  2348.  sub.w d0,defbotclip
  2349.  move.w #0,topclip
  2350.  add.w d0,topclip
  2351.  move.w BOTTOMY,botclip
  2352.  sub.w d0,botclip
  2353.  
  2354.  bsr DrawDisplay
  2355.  
  2356. nodrawp2:
  2357.  
  2358. ***************************************** 
  2359. * Copy from copbuff to chip ram
  2360.  
  2361.  
  2362. ; move.l drawpt,a3
  2363. ; adda.w #10,a3
  2364. ; move.l COPSCRNBUFF,a2
  2365. ; move.w #2,d6
  2366. ; adda.w #10,a2
  2367. ;COPYOUT
  2368. ; move.w #31,d0
  2369. ;COPYDOWN1:
  2370. ; move.w #3,d1
  2371. ; move.l a2,a4
  2372. ; move.l a3,a5
  2373. ;.inlop1:
  2374. ;val SET 0
  2375. ; REPT 20
  2376. ; move.w val(a4),val(a5)
  2377. ;val SET val+104*4
  2378. ; ENDR
  2379. ; adda.l #104*4*20,a4
  2380. ; adda.l #104*4*20,a5
  2381. ; dbra d1,.inlop1
  2382. ; addq #4,a2
  2383. ; addq #4,a3
  2384. ; dbra d0,COPYDOWN1
  2385. ; addq #4,a2
  2386. ; addq #4,a3
  2387. ; dbra d6,COPYOUT 
  2388.  
  2389.  tst.b MAPON
  2390.  beq.s .nomap
  2391.  bsr DoTheMapWotNastyCharlesIsForcingMeToDo
  2392. .nomap
  2393.  
  2394.  move.w WIDESCRN,d7
  2395.  
  2396.  tst.b FULLSCR
  2397.  beq nobigconv
  2398.  
  2399.  move.l FASTBUFFER,a0
  2400. ; add.l #320*2*20,a0
  2401.  move.w d7,d6
  2402.  muls #320,d6
  2403.  add.l d6,a0
  2404.  move.l SCRNDRAWPT,a1
  2405.  move.w d7,d6
  2406.  muls #40,d6
  2407.  add.l d6,a1
  2408.  add.l #2,a1
  2409.  move.l #(288/8)-1,d0
  2410.  move.l #231,d1
  2411.  sub.w d7,d1
  2412.  sub.w d7,d1
  2413.  blt nochunk
  2414.  move.w #(320-288),d2
  2415.  move.w #4,d3
  2416.  
  2417.  bra donebigconv
  2418.  
  2419. nobigconv:
  2420.  
  2421.  move.l FASTBUFFER,a0
  2422.  move.w d7,d6
  2423.  muls #320,d6
  2424.  add.l d6,a0
  2425.  move.l SCRNDRAWPT,a1
  2426.  add.l #8+40*20,a1
  2427.  move.w d7,d6
  2428.  muls #40,d6
  2429.  add.l d6,a1
  2430.  move.l #(192/8)-1,d0
  2431.  move.l #159,d1
  2432.  sub.w d7,d1
  2433.  sub.w d7,d1
  2434.  blt nochunk
  2435.  move.w #(320-192),d2
  2436.  move.w #16,d3
  2437. donebigconv
  2438.  
  2439.  tst.b DOUBLEHEIGHT
  2440.  beq.s .nodoub
  2441.  asr.w #1,d1
  2442.  blt nochunk
  2443.  add.w #320,d2
  2444.  add.w #40,d3
  2445. .nodoub:
  2446.  
  2447.  move.b DOUBLEWIDTH,d4
  2448.  move.b PLR1_TELEPORTED,d5
  2449.  clr.b PLR1_TELEPORTED
  2450.  jsr CHUNKYTOPLANAR 
  2451.  
  2452. nochunk:
  2453.  
  2454.  move.l #KeyMap,a5
  2455.  tst.b $4a(a5)
  2456.  beq .nosmallscr
  2457.  
  2458.  move.l #0,d7
  2459.  move.l #0,d6
  2460.  tst.b FULLSCR
  2461.  bne.s .attop
  2462.  move.l #40*20,d7
  2463.  move.l #40*60,d6
  2464. .attop:
  2465.  
  2466.  move.w WIDESCRN,d0
  2467.  move.l SCRNDRAWPT,a0
  2468.  add.l d7,a0
  2469.  muls #40,d0
  2470.  add.l d0,a0
  2471.  bsr CLRTWOLINES
  2472.  move.w WIDESCRN,d0
  2473.  move.l SCRNSHOWPT,a0
  2474.  add.l d7,a0
  2475.  muls #40,d0
  2476.  add.l d0,a0
  2477.  bsr CLRTWOLINES
  2478.  
  2479.  add.w #2,WIDESCRN
  2480.  
  2481.  move.l SCRNDRAWPT,a0
  2482.  add.l #232*40,a0
  2483.  sub.l d6,a0
  2484.  move.w WIDESCRN,d0
  2485.  muls #40,d0
  2486.  sub.l d0,a0
  2487.  bsr CLRTWOLINES
  2488.  move.l SCRNSHOWPT,a0
  2489.  sub.l d6,a0
  2490.  add.l #232*40,a0
  2491.  move.w WIDESCRN,d0
  2492.  muls #40,d0
  2493.  sub.l d0,a0
  2494.  bsr CLRTWOLINES
  2495.  
  2496. .nosmallscr
  2497.  
  2498.  tst.b $5e(a5)
  2499.  beq.s .nobigscr
  2500.  tst.w WIDESCRN
  2501.  ble.s .nobigscr
  2502.  
  2503.  sub.w #2,WIDESCRN
  2504.  
  2505. .nobigscr
  2506.  
  2507.  
  2508.  tst.b (a5)
  2509.  beq.s .nosavescrn
  2510.  
  2511.  not.b USEDOUG
  2512.  
  2513.  jsr SAVETHESCREEN
  2514.  
  2515. .nosavescrn:
  2516.  
  2517.  tst.b $5b(a5)
  2518.  beq notdoubheight
  2519.  tst.b LASTDH
  2520.  bne notdoubheight2
  2521.  st LASTDH 
  2522.  
  2523.  move.w #0,d0
  2524.  move.w #0,d1
  2525.  
  2526.  not.b DOUBLEHEIGHT
  2527.  beq.s singlepixheight
  2528.  move.w #-40,d0
  2529.  move.w #40,d1
  2530.  
  2531. singlepixheight:
  2532.  
  2533.  move.l #SCRMODULOS,a0
  2534.  move.w #115,d2
  2535. putinmode:
  2536.  move.w d0,6(a0)
  2537.  move.w d0,6+4(a0)
  2538.  move.w d1,6+16(a0)
  2539.  move.w d1,6+16+4(a0)
  2540.  add.w #32,a0
  2541.  dbra d2,putinmode
  2542.  
  2543.  bra notdoubheight2
  2544.  
  2545. notdoubheight:
  2546.  clr.b LASTDH
  2547. notdoubheight2
  2548.  
  2549.  tst.b $5a(a5)
  2550.  beq.s notdoubwidth
  2551.  tst.b LASTDW
  2552.  bne notdoubwidth2
  2553.  st LASTDW
  2554.  not.b DOUBLEWIDTH
  2555.  bra.s notdoubwidth2
  2556.  
  2557. notdoubwidth:
  2558.  clr.b LASTDW
  2559. notdoubwidth2:
  2560.  
  2561. ***************************************** 
  2562.  move.l PLR2_Roompt,a0
  2563.  move.l #WorkSpace,a1
  2564.  clr.l (a1)
  2565.  clr.l 4(a1)
  2566.  clr.l 8(a1)
  2567.  clr.l 12(a1)
  2568.  clr.l 16(a1)
  2569.  clr.l 20(a1)
  2570.  clr.l 24(a1)
  2571.  clr.l 28(a1)
  2572.  
  2573.  cmp.b #'n',mors
  2574.  beq.s plr1only
  2575.  
  2576.  lea ToListOfGraph(a0),a0
  2577. .doallrooms:
  2578.  move.w (a0),d0
  2579.  blt.s .allroomsdone
  2580.  addq #8,a0
  2581.  move.w d0,d1
  2582.  asr.w #3,d0
  2583.  bset d1,(a1,d0.w)
  2584.  bra .doallrooms
  2585. .allroomsdone:
  2586.  
  2587. plr1only:
  2588.  
  2589.  move.l PLR1_Roompt,a0
  2590.  lea ToListOfGraph(a0),a0
  2591. .doallrooms2:
  2592.  move.w (a0),d0
  2593.  blt.s .allroomsdone2
  2594.  addq #8,a0
  2595.  move.w d0,d1
  2596.  asr.w #3,d0
  2597.  bset d1,(a1,d0.w)
  2598.  bra .doallrooms2
  2599. .allroomsdone2:
  2600.  
  2601.  move.l #%000001,d7
  2602.  lea TEAMWORK,a2
  2603.  move.l ObjectData,a0
  2604.  sub.w #64,a0
  2605. .doallobs:
  2606.  add.w #64,a0
  2607.  move.w (a0),d0
  2608.  blt.s .allobsdone
  2609.  move.w 12(a0),d0
  2610.  blt.s .doallobs
  2611.  move.w d0,d1
  2612.  asr.w #3,d0
  2613.  btst d1,(a1,d0.w)
  2614.  bne.s .worryobj
  2615.  move.b 16(a0),d0
  2616.  btst d0,d7
  2617.  beq.s .doallobs
  2618.  moveq #0,d0
  2619.  move.b teamnumber(a0),d0
  2620.  blt.s .doallobs
  2621.  asl.w #4,d0
  2622.  tst.w SEENBY(a2,d0.w)
  2623.  blt.s .doallobs
  2624. .worryobj:
  2625.  or.b #127,worry(a0)
  2626.  bra.s .doallobs
  2627. .allobsdone:
  2628.  
  2629.  
  2630.  
  2631. ; move.l #brightentab,a0
  2632. ; move.l frompt,a3
  2633. ; adda.w #(4*33)+(104*4*20),a3
  2634. ; move.w #20,d7
  2635. ; move.w #20,d6
  2636. ;horl:
  2637. ; move.w d6,d5
  2638. ; move.l a3,a1
  2639. ;vertl
  2640. ; move.w (a1),d0
  2641. ; move.w (a0,d0.w*2),(a1)
  2642. ; addq #4,a1
  2643. ; dbra d5,vertl
  2644. ; adda.w #104*4,a3
  2645. ; dbra d7,horl
  2646.  
  2647.  move.l #$dff000,a6
  2648.  
  2649. ; move.w #$300,col0(a6)
  2650.  
  2651.  move.l #KeyMap,a5
  2652.  tst.b $45(a5)
  2653.  beq.s noend
  2654.  
  2655.  cmp.b #'s',mors
  2656.  beq plr2quit 
  2657.  
  2658.  st MASTERQUITTING
  2659.  bra noend
  2660.  
  2661. plr2quit:
  2662.  st SLAVEQUITTING
  2663. noend:
  2664.  
  2665.  tst.b MASTERQUITTING
  2666.  beq.s .noquit
  2667.  tst.b SLAVEQUITTING
  2668.  beq.s .noquit
  2669.  jmp endnomusic
  2670. .noquit
  2671.  
  2672.  cmp.b #'n',mors
  2673.  bne.s noexit
  2674.  move.l PLR1_Roompt,a0
  2675.  move.w (a0),d0
  2676. ; move.w PLOPT,d1
  2677. ; move.l #ENDZONES,a0
  2678. ; cmp.w (a0,d1.w*2),d0
  2679.  
  2680.  cmp.w ENDZONE,d0
  2681.  
  2682. ; change this for quick exit, charlie
  2683. zzzz:
  2684. ; bra end
  2685.  
  2686.  bne.s noexit
  2687.  jmp end
  2688. noexit:
  2689.  
  2690.  tst.w PLAYERONEHEALTH
  2691.  bgt nnoend1
  2692.  jmp end
  2693. nnoend1:
  2694.  tst.w PLR2_energy
  2695.  bgt nnoend2
  2696.  jmp end
  2697. nnoend2:
  2698.  
  2699. ; move.l SwitchData,a0
  2700. ; tst.b 24+8(a0)
  2701. ; bne end
  2702.   
  2703. ; JSR STOPTIMER
  2704.  
  2705.  
  2706.  bra lop
  2707.  
  2708. CLRTWOLINES:
  2709.  
  2710.  moveq #0,d1
  2711.  move.w #7,d2
  2712. .ccc
  2713.  move.l d1,2(a0)
  2714.  move.l d1,6(a0)
  2715.  move.l d1,10(a0)
  2716.  move.l d1,14(a0)
  2717.  move.l d1,18(a0)
  2718.  move.l d1,22(a0)
  2719.  move.l d1,26(a0)
  2720.  move.l d1,30(a0)
  2721.  move.l d1,34(a0)
  2722.  move.l d1,2+40(a0)
  2723.  move.l d1,6+40(a0)
  2724.  move.l d1,10+40(a0)
  2725.  move.l d1,14+40(a0)
  2726.  move.l d1,18+40(a0)
  2727.  move.l d1,22+40(a0)
  2728.  move.l d1,26+40(a0)
  2729.  move.l d1,30+40(a0)
  2730.  move.l d1,34+40(a0)
  2731.  add.l #10240,a0
  2732.  dbra d2,.ccc
  2733.  rts
  2734.  
  2735.  
  2736. LASTDH: dc.b 0
  2737. LASTDW: dc.b 0
  2738. WIDESCRN: dc.w 0
  2739. TRRANS: dc.w 0
  2740. DOANYWATER: dc.w 0
  2741.  
  2742. DoTheMapWotNastyCharlesIsForcingMeToDo:
  2743.  
  2744.  move.l #SHADINGTABLE,a4
  2745. ; add.w MAPBRIGHT,a4
  2746.  
  2747.  move.l #KeyMap,a5
  2748.  tst.b $50(a5)
  2749.  beq.s .nobrighter
  2750.  tst.w MAPBRIGHT
  2751.  beq.s .nobrighter
  2752.  
  2753.  sub.w #1,MAPBRIGHT
  2754.  
  2755. .nobrighter:
  2756.  
  2757.  tst.b $51(a5)
  2758.  beq.s .nodimmer
  2759.  cmp.w #7,MAPBRIGHT
  2760.  bge.s .nodimmer
  2761.  
  2762.  add.w #1,MAPBRIGHT
  2763.  
  2764. .nodimmer:
  2765.  
  2766.  move.l #Rotated,a1
  2767.  move.l #COMPACTMAP,a2
  2768.  move.l #BIGMAP-40,a3
  2769.  
  2770. preshow:
  2771.  add.w #40,a3
  2772.  
  2773. SHOWMAP:
  2774.  move.l (a2)+,d5
  2775.  move.l a2,d7
  2776.  cmp.l LASTZONE,d7
  2777.  bgt shownmap
  2778.  
  2779.  tst.l d5
  2780.  beq.s preshow
  2781.  
  2782.  move.w #9,d7
  2783. wallsofzone
  2784.  
  2785.  asr.l #1,d5
  2786.  bcs.s WALLSEEN
  2787.  
  2788.  asr.l #1,d5
  2789.  bcs.s WALLMAPPED
  2790.  
  2791.  asr.l #1,d5
  2792.  addq #4,a3
  2793.  bra.s DECIDEDWALL
  2794.  
  2795. WALLMAPPED:
  2796.  move.w #$b00,d4
  2797.  asr.l #1,d5
  2798.  bcc.s .notadoor
  2799.  move.w #$e00,d4
  2800. .notadoor
  2801.  
  2802.  st TRRANS
  2803.  
  2804.  bra.s DECIDEDCOLOUR
  2805.  
  2806. WALLSEEN:
  2807.  
  2808.  clr.b TRRANS
  2809.  
  2810.  move.w #255,d4
  2811.  asr.l #2,d5
  2812.  bcc.s .notadoor
  2813.  move.w #254,d4
  2814. .notadoor
  2815. DECIDEDCOLOUR:
  2816.  move.w (a3)+,d6
  2817.  move.l (a1,d6.w*8),d0
  2818.  asr.l #7,d0
  2819.  add.w mapxoff,d0
  2820.  move.w 6(a1,d6.w*8),d1
  2821.  add.w mapzoff,d1
  2822.  move.w (a3)+,d6
  2823.  move.l (a1,d6.w*8),d2
  2824.  asr.l #7,d2
  2825.  add.w mapxoff,d2
  2826.  move.w 6(a1,d6.w*8),d3
  2827.  add.w mapzoff,d3
  2828.  
  2829.  neg.w d1
  2830.  neg.w d3
  2831.  
  2832.  movem.l d7/d5,-(a7)
  2833.  bsr CLIPANDDRAW
  2834.  movem.l (a7)+,d7/d5
  2835.  
  2836. DECIDEDWALL:
  2837.  
  2838.  dbra d7,wallsofzone
  2839.  bra SHOWMAP
  2840.  
  2841. shownmap:
  2842.  
  2843.  clr.b TRRANS
  2844.  
  2845.  move.w mapxoff,d0
  2846.  move.w mapzoff,d1
  2847.  neg.w d1
  2848.  move.w d0,d2
  2849.  move.w d1,d3
  2850.  sub.w #128,d1
  2851.  add.w #128,d3
  2852.  move.w #250,d4
  2853.  bsr CLIPANDDRAW
  2854.  
  2855.  move.w mapxoff,d0
  2856.  move.w mapzoff,d1
  2857.  neg.w d1
  2858.  move.w d0,d2
  2859.  move.w d1,d3
  2860.  sub.w #128,d1
  2861.  sub.w #32,d3
  2862.  sub.w #64,d2
  2863.  move.w #250,d4
  2864.  bsr CLIPANDDRAW
  2865.  
  2866.  move.w mapxoff,d0
  2867.  move.w mapzoff,d1
  2868.  neg.w d1
  2869.  move.w d0,d2
  2870.  move.w d1,d3
  2871.  sub.w #128,d1
  2872.  sub.w #32,d3
  2873.  add.w #64,d2
  2874.  move.w #250,d4
  2875.  bsr CLIPANDDRAW
  2876.  rts
  2877.  
  2878.  
  2879. CLIPANDDRAW:
  2880.  
  2881.  tst.b FULLSCR
  2882.  beq.s .nodov
  2883.  
  2884.  add.w d0,d0
  2885.  add.w d2,d2
  2886.  ext.l d0
  2887.  ext.l d2
  2888.  divs #3,d0
  2889.  divs #3,d2
  2890.  
  2891. .nodov:
  2892.  
  2893.  move.w MAPBRIGHT,d5
  2894.  asr.w d5,d0
  2895.  asr.w d5,d1
  2896.  asr.w d5,d2
  2897.  asr.w d5,d3
  2898.  
  2899. NOSCALING:
  2900.  add.w #96,d0
  2901.  bge p1xpos
  2902.  
  2903.  add.w #96,d2
  2904.  blt OFFSCREEN
  2905.  
  2906. x1nx2p:
  2907.  
  2908.  move.w d3,d5
  2909.  sub.w d1,d5
  2910.  move.w d2,d6
  2911.  sub.w d0,d6
  2912.  beq OFFSCREEN
  2913.  
  2914.  muls d0,d5
  2915.  divs d6,d5
  2916.  sub.w d5,d1
  2917.  move.w #0,d0
  2918.  
  2919.  bra doneleftclip
  2920.  
  2921. p1xpos:
  2922.  
  2923.  add.w #96,d2
  2924.  bge doneleftclip
  2925.  
  2926.  move.w d1,d5
  2927.  sub.w d3,d5
  2928.  move.w d0,d6
  2929.  sub.w d2,d6
  2930.  beq OFFSCREEN
  2931.  
  2932.  muls d2,d5
  2933.  divs d6,d5
  2934.  sub.w d5,d3
  2935.  move.w #0,d2
  2936.  
  2937. doneleftclip:
  2938.  
  2939.  cmp.w #191,d0
  2940.  ble p1xneg
  2941.  
  2942.  cmp.w #191,d2
  2943.  bgt OFFSCREEN
  2944.  
  2945.  move.w d0,d6
  2946.  sub.w d2,d6
  2947.  beq OFFSCREEN
  2948.  sub.w #191,d0
  2949.  move.w d3,d5
  2950.  sub.w d1,d5
  2951.  
  2952.  muls d5,d0
  2953.  divs d6,d0
  2954.  add.w d0,d1
  2955.  move.w #191,d0
  2956.  
  2957.  bra donerightclip
  2958.  
  2959. p1xneg:
  2960.  
  2961.  cmp.w #191,d2
  2962.  ble donerightclip
  2963.  
  2964.  move.w d2,d6
  2965.  sub.w d0,d6
  2966.  beq OFFSCREEN
  2967.  sub.w #191,d2
  2968.  move.w d1,d5
  2969.  sub.w d3,d5
  2970.  
  2971.  muls d5,d2
  2972.  divs d6,d2
  2973.  add.w d2,d3
  2974.  move.w #191,d2
  2975.  
  2976. donerightclip:
  2977.  
  2978. *********************************
  2979.  
  2980.  add.w #80,d1
  2981.  bge p1ypos
  2982.  
  2983.  add.w #80,d3
  2984.  blt OFFSCREEN
  2985.  
  2986.  move.w d2,d5
  2987.  sub.w d0,d5
  2988.  move.w d3,d6
  2989.  sub.w d1,d6
  2990.  beq OFFSCREEN
  2991.  
  2992.  muls d1,d5
  2993.  divs d6,d5
  2994.  sub.w d5,d0
  2995.  move.w #0,d1
  2996.  
  2997.  bra donetopclip
  2998.  
  2999. p1ypos:
  3000.  
  3001.  add.w #80,d3
  3002.  bge donetopclip
  3003.  
  3004.  move.w d0,d5
  3005.  sub.w d2,d5
  3006.  move.w d1,d6
  3007.  sub.w d3,d6
  3008.  beq OFFSCREEN
  3009.  
  3010.  muls d3,d5
  3011.  divs d6,d5
  3012.  sub.w d5,d2
  3013.  move.w #0,d3
  3014.  
  3015. donetopclip:
  3016.  
  3017.  cmp.w #159,d1
  3018.  ble p1yneg
  3019.  
  3020.  cmp.w #159,d3
  3021.  bgt OFFSCREEN
  3022.  
  3023.  move.w d1,d6
  3024.  sub.w d3,d6
  3025.  beq OFFSCREEN
  3026.  sub.w #159,d1
  3027.  move.w d2,d5
  3028.  sub.w d0,d5
  3029.  
  3030.  muls d5,d1
  3031.  divs d6,d1
  3032.  add.w d1,d0
  3033.  move.w #159,d1
  3034.  
  3035.  bra donebotclip
  3036.  
  3037. p1yneg:
  3038.  
  3039.  cmp.w #159,d3
  3040.  ble donebotclip
  3041.  
  3042.  move.w d3,d6
  3043.  sub.w d1,d6
  3044.  beq OFFSCREEN
  3045.  sub.w #159,d3
  3046.  move.w d0,d5
  3047.  sub.w d2,d5
  3048.  
  3049.  muls d5,d3
  3050.  divs d6,d3
  3051.  add.w d3,d2
  3052.  move.w #159,d3
  3053.  
  3054. donebotclip:
  3055.  
  3056.  tst.b TRRANS
  3057.  bne DRAWAtransLINE
  3058.  bra DRAWAMAPLINE
  3059.  
  3060. OFFSCREEN:
  3061. NOLINEtrans:
  3062.  rts
  3063.  
  3064. MAPBRIGHT:
  3065.  dc.w 0
  3066. mapxoff: dc.w 0
  3067. mapzoff: dc.w 0
  3068.  
  3069. DRAWAtransLINE:
  3070.  
  3071.  move.l FASTBUFFER,a0    ; screen to render to.
  3072.  
  3073.  tst.b FULLSCR
  3074.  beq.s .nooffset
  3075.   
  3076.  add.l #(320*40)+(48*2),a0
  3077.   
  3078. .nooffset:
  3079.  
  3080.  cmp.w d1,d3
  3081.  bgt.s .okdown
  3082.  bne.s .aline
  3083.  cmp.w d0,d2
  3084.  beq.s NOLINEtrans 
  3085. .aline
  3086.  exg d0,d2
  3087.  exg d1,d3
  3088. .okdown
  3089.  
  3090.  move.w d1,d5
  3091.  muls #320,d5
  3092.  add.l d5,a0
  3093.  lea (a0,d0.w*2),a0
  3094.  
  3095.  sub.w d1,d3
  3096.  
  3097.  sub.w d0,d2
  3098.  bge.s downrighttrans
  3099.  
  3100. downlefttrans:
  3101.  neg.w d2
  3102.  cmp.w d2,d3
  3103.  bgt.s downmorelefttrans
  3104.  
  3105. downleftmoretrans:
  3106.  move.w #320,d6
  3107.  move.w d2,d0
  3108.  move.w d2,d7
  3109.  
  3110. .linelop:
  3111.  move.b (a0),d4
  3112.  move.b (a4,d4.w*2),(a0)
  3113.  subq #1,a0
  3114.  sub.w d3,d0
  3115.  bgt.s .noextra
  3116.  add.w d2,d0
  3117.  add.w d6,a0
  3118. .noextra:
  3119.  dbra d7,.linelop
  3120.  rts
  3121.  
  3122. downmorelefttrans:
  3123.  move.w #320,d6
  3124.  move.w d3,d0
  3125.  move.w d3,d7
  3126.  
  3127. .linelop:
  3128.  move.b (a0),d4
  3129.  move.b (a4,d4.w*2),(a0)
  3130.  add.w d6,a0
  3131.  sub.w d2,d0
  3132.  bgt.s .noextra
  3133.  add.w d3,d0
  3134.  subq #1,a0
  3135. .noextra:
  3136.  dbra d7,.linelop
  3137.  
  3138.  rts
  3139.  
  3140. downrighttrans:
  3141.  
  3142.  cmp.w d2,d3
  3143.  bgt.s downmorerighttrans
  3144.  
  3145. downrightmoretrans:
  3146.  move.w #320,d6
  3147.  move.w d2,d0
  3148.  move.w d2,d7
  3149.  
  3150. .linelop:
  3151.  move.b (a0),d4
  3152.  move.b (a4,d4.w*2),(a0)+
  3153.  sub.w d3,d0
  3154.  bgt.s .noextra
  3155.  add.w d2,d0
  3156.  add.w d6,a0
  3157. .noextra:
  3158.  dbra d7,.linelop
  3159.  
  3160.  rts
  3161.  
  3162. downmorerighttrans:
  3163.  move.w #320,d6
  3164.  move.w d3,d0
  3165.  move.w d3,d7
  3166.  
  3167. .linelop:
  3168.  move.b (a0),d4
  3169.  move.b (a4,d4.w*2),(a0)
  3170.  add.w d6,a0
  3171.  sub.w d2,d0
  3172.  bgt.s .noextra
  3173.  add.w d3,d0
  3174.  addq #1,a0
  3175. .noextra:
  3176.  dbra d7,.linelop
  3177.  
  3178.  rts
  3179.  
  3180. NOLINE:
  3181.  rts
  3182.  
  3183. DRAWAMAPLINE:
  3184.  
  3185.  
  3186.  move.l FASTBUFFER,a0    ; screen to render to.
  3187.  cmp.w d1,d3
  3188.  bgt.s .okdown
  3189.  bne.s .aline
  3190.  cmp.w d0,d2
  3191.  beq.s NOLINE 
  3192. .aline
  3193.  exg d0,d2
  3194.  exg d1,d3
  3195. .okdown
  3196.  
  3197.  move.w d1,d5
  3198.  muls #320,d5
  3199.  add.l d5,a0
  3200.  lea (a0,d0.w),a0
  3201.  
  3202.  sub.w d1,d3
  3203.  
  3204.  sub.w d0,d2
  3205.  bge.s downright
  3206.  
  3207. downleft:
  3208.  neg.w d2
  3209.  cmp.w d2,d3
  3210.  bgt.s downmoreleft
  3211.  
  3212. downleftmore:
  3213.  move.w #320,d6
  3214.  move.w d2,d0
  3215.  move.w d2,d7
  3216.  addq #1,a0
  3217.  
  3218. .linelop:
  3219.  move.b d4,-(a0)
  3220.  sub.w d3,d0
  3221.  bgt.s .noextra
  3222.  add.w d2,d0
  3223.  add.w d6,a0
  3224. .noextra:
  3225.  dbra d7,.linelop
  3226.  rts
  3227.  
  3228. downmoreleft:
  3229.  move.w #320,d6
  3230.  move.w d3,d0
  3231.  move.w d3,d7
  3232.  
  3233. .linelop:
  3234.  move.b d4,(a0)
  3235.  add.w d6,a0
  3236.  sub.w d2,d0
  3237.  bgt.s .noextra
  3238.  add.w d3,d0
  3239.  subq #1,a0
  3240. .noextra:
  3241.  dbra d7,.linelop
  3242.  
  3243.  rts
  3244.  
  3245. downright:
  3246.  
  3247.  cmp.w d2,d3
  3248.  bgt.s downmoreright
  3249.  
  3250. downrightmore:
  3251.  move.w #320,d6
  3252.  move.w d2,d0
  3253.  move.w d2,d7
  3254.  
  3255. .linelop:
  3256.  move.b d4,(a0)+
  3257.  sub.w d3,d0
  3258.  bgt.s .noextra
  3259.  add.w d2,d0
  3260.  add.w d6,a0
  3261. .noextra:
  3262.  dbra d7,.linelop
  3263.  
  3264.  rts
  3265.  
  3266. downmoreright:
  3267.  move.w #320,d6
  3268.  move.w d3,d0
  3269.  move.w d3,d7
  3270.  
  3271. .linelop:
  3272.  move.b d4,(a0)
  3273.  add.w d6,a0
  3274.  sub.w d2,d0
  3275.  bgt.s .noextra
  3276.  add.w d3,d0
  3277.  addq #1,a0
  3278. .noextra:
  3279.  dbra d7,.linelop
  3280.  
  3281.  rts
  3282.  
  3283. SAVETHESCREEN:
  3284.  
  3285.  move.l old,$dff080
  3286.  move.w #$8020,$dff000+intena
  3287.  
  3288.  move.l doslib,a6
  3289.  move.l #SAVENAME,d1
  3290.  move.l #1006,d2
  3291.  jsr -30(a6)
  3292.  move.l d0,handle
  3293.  
  3294.  move.l doslib,a6
  3295.  move.l #scrn,d2
  3296.  move.l handle,d1
  3297.  move.l #10240*8,d3
  3298.  jsr _LVOWrite(a6)
  3299.  
  3300.  move.l doslib,a6
  3301.  move.l handle,d1
  3302.  jsr -36(a6)
  3303.  
  3304.  move.l doslib,a6
  3305.  move.l #200,d1
  3306.  jsr -198(a6) 
  3307.  
  3308.  move.w #$0020,$dff000+intena
  3309.  move.l #bigfield,$dff080
  3310.  
  3311.  add.b #1,SAVELETTER
  3312.  
  3313.  rts
  3314.  
  3315. SAVENAME: dc.b 'df0:rawscrn'
  3316. SAVELETTER: dc.b 'd',0
  3317.  
  3318.  even
  3319.  
  3320.  include "ab3:source_4000/CHUNKY.s"
  3321.  
  3322.  
  3323. MASTERQUITTING: dc.b 0
  3324. SLAVEQUITTING: dc.b 0
  3325. MASTERPAUSE: dc.b 0
  3326. SLAVEPAUSE: dc.b 0
  3327.  
  3328. PAUSEOPTS:
  3329.  include "ab3:source_4000/pauseopts"
  3330.  
  3331. ENDZONE: dc.w 0
  3332.  
  3333. ENDZONES:
  3334. ; LEVEL 1
  3335.  dc.w -1
  3336. ; dc.w 55
  3337. ; LEVEL 2
  3338.  dc.w 149
  3339. ; LEVEL 3
  3340.  dc.w 155
  3341. ; LEVEL 4
  3342.  dc.w 107
  3343. ; LEVEL 5
  3344.  dc.w 67
  3345. ; LEVEL 6
  3346.  dc.w 132
  3347. ; LEVEL 7
  3348.  dc.w 203
  3349. ; LEVEL 8
  3350.  dc.w 166
  3351. ; LEVEL 9
  3352.  dc.w 118
  3353. ; LEVEL 10
  3354.  dc.w 102
  3355. ; LEVEL 11
  3356.  dc.w 103
  3357. ; LEVEL 12
  3358.  dc.w 2
  3359. ; LEVEL 13
  3360.  dc.w 98
  3361. ; LEVEL 14
  3362.  dc.w 0
  3363. ; LEVEL 15
  3364.  dc.w 148
  3365. ; LEVEL 16
  3366.  dc.w 103
  3367.  
  3368. ***************************************************************************
  3369. ***************************************************************************
  3370. ****************** End of Main Loop here ********************************** 
  3371. ***************************************************************************
  3372. ***************************************************************************
  3373.  
  3374. putinsmallscr:
  3375.  
  3376.  rts
  3377.  
  3378.  move.l #$1fe0000,statskip
  3379.  move.l #$1fe0000,statskip+4
  3380.  
  3381.  move.l #healthpal,a5
  3382. ; move.l COPSCRN1,a0
  3383. ; move.l COPSCRN2,a2
  3384.  move.w #scrheight-1,d0
  3385.  move.l #0,d6
  3386.  move.w #0,d3
  3387.  move.w #$2bdf,startwait
  3388.  move.w #$2d01,endwait
  3389. .fillcop
  3390.  move.w #$180,d1
  3391.  
  3392.  move.l a0,a1
  3393.  move.l a2,a3
  3394.  move.w #$10c,(a1)+
  3395.  move.w #$10c,(a3)+
  3396.  move.w d3,(a1)+
  3397.  move.w d3,(a3)+
  3398.  eor.w #$8000,d3
  3399.  
  3400.  move.w #$106,(a1)+
  3401.  move.w #$106,(a3)+
  3402.  move.w #$2c42,d5
  3403.  or.w d3,d5
  3404.  and.w #$fffe,d5
  3405.  move.w d5,(a1)+
  3406.  move.w d5,(a3)+
  3407.  bsr do32
  3408.  
  3409.  move.w #$106,(a1)+
  3410.  move.w #$106,(a3)+
  3411.  move.w #$4c42,d5
  3412.  or.w d3,d5
  3413.  and.w #$fffe,d5
  3414.  move.w d5,(a1)+
  3415.  move.w d5,(a3)+
  3416.  bsr do32
  3417.  
  3418.  move.w #$106,(a1)+
  3419.  move.w #$106,(a3)+
  3420.  move.w #$6c42,d5
  3421.  or.w d3,d5
  3422.  and.w #$fffe,d5
  3423.  move.w d5,(a1)+
  3424.  move.w d5,(a3)+
  3425.  bsr do32
  3426.  
  3427.  
  3428.  move.l #$1060c42,(a1)+
  3429.  move.l #$1060c42,(a3)+
  3430.  move.w #$19e,(a1)+
  3431.  move.w (a5),(a1)+
  3432.  move.w #$19e,(a3)+
  3433.  move.w (a5)+,(a3)+
  3434.  
  3435. **********************************
  3436.  
  3437.  adda.w #104*4,a0
  3438.  adda.w #104*4,a2
  3439.  dbra d0,.fillcop
  3440.  
  3441.  move.w #$48,fetchstart
  3442.  move.w #$88,fetchstop
  3443.  move.w #$2cb1,winstart
  3444.  move.w #$2c91,winstop
  3445.  move.w #-24,modulo
  3446.  move.w #-24,modulo+4
  3447.  
  3448.  move.l #nullspr,d0
  3449.  move.w d0,s4l
  3450.  move.w d0,s5l
  3451.  move.w d0,s6l
  3452.  move.w d0,s7l
  3453.  swap d0
  3454.  move.w d0,s4h
  3455.  move.w d0,s5h
  3456.  move.w d0,s6h
  3457.  move.w d0,s7h 
  3458.  
  3459.  move.l #borders,d0
  3460.  move.w d0,s0l
  3461.  swap d0
  3462.  move.w d0,s0h
  3463.  move.l #borders+2592,d0
  3464.  move.w d0,s1l
  3465.  swap d0
  3466.  move.w d0,s1h
  3467.  move.l #borders+2592*2,d0
  3468.  move.w d0,s2l
  3469.  swap d0
  3470.  move.w d0,s2h
  3471.  move.l #borders+2592*3,d0
  3472.  move.w d0,s3l
  3473.  swap d0
  3474.  move.w d0,s3h
  3475.  
  3476.  
  3477.  move.l #scrn+40,a0
  3478.  move.l #scrn+160,a1
  3479.  move.l #scrn+280,a2
  3480.  move.l #smallscrntab,a3
  3481.  move.w #191,d7    ; counter
  3482.  move.w #0,d1    ; xpos
  3483. .plotscrnloop:
  3484.  move.b (a3)+,d0
  3485.  move.w d1,d2
  3486.  asr.w #3,d2
  3487.  move.b d1,d3
  3488.  not.b d3
  3489.  bclr.b d3,-40(a0,d2.w)
  3490.  bclr.b d3,(a0,d2.w)
  3491.  bclr.b d3,40(a0,d2.w)
  3492.  bclr.b d3,-40(a1,d2.w)
  3493.  bclr.b d3,(a1,d2.w)
  3494.  bclr.b d3,40(a1,d2.w)
  3495.  bclr.b d3,-40(a2,d2.w)
  3496.  btst #0,d0
  3497.  beq.s .nobp1
  3498.  bset.b d3,-40(a0,d2.w)
  3499. .nobp1:
  3500.  btst #1,d0
  3501.  beq.s .nobp2
  3502.  bset.b d3,(a0,d2.w)
  3503. .nobp2:
  3504.  btst #2,d0
  3505.  beq.s .nobp3
  3506.  bset.b d3,40(a0,d2.w)
  3507. .nobp3:
  3508.  btst #3,d0
  3509.  beq.s .nobp4
  3510.  bset.b d3,-40(a1,d2.w)
  3511. .nobp4:
  3512.  btst #4,d0
  3513.  beq.s .nobp5
  3514.  bset.b d3,(a1,d2.w)
  3515. .nobp5:
  3516.  btst #5,d0
  3517.  beq.s .nobp6
  3518.  bset.b d3,40(a1,d2.w)
  3519. .nobp6:
  3520.  btst #6,d0
  3521.  beq.s .nobp7
  3522.  bset.b d3,-40(a2,d2.w)
  3523. .nobp7:
  3524.  
  3525.  addq #1,d1
  3526.  
  3527.  dbra d7,.plotscrnloop
  3528.  
  3529.  
  3530.  rts
  3531.  
  3532. putinlargescr:
  3533.  
  3534.  move.l #$1000000,statskip
  3535.  move.l #$fffffffe,statskip+4
  3536.  
  3537.  move.l #healthpal,a5
  3538. ; move.l COPSCRN1,a0
  3539. ; move.l COPSCRN2,a2
  3540.  move.w #scrheight-1,d0
  3541.  move.l #0,d6
  3542.  move.w #0,d3
  3543.  move.w #$29df,startwait
  3544.  move.w #$2b01,endwait
  3545. .fillcop
  3546.  move.w #$180,d1
  3547.  
  3548.  move.l a0,a1
  3549.  move.l a2,a3
  3550.  move.w #$10c,(a1)+
  3551.  move.w #$10c,(a3)+
  3552.  move.w d3,(a1)+
  3553.  move.w d3,(a3)+
  3554.  eor.w #$8000,d3
  3555.  
  3556.  move.w #$106,(a1)+
  3557.  move.w #$106,(a3)+
  3558.  move.w #$2c42,d5
  3559.  or.w d3,d5
  3560.  and.w #$fffe,d5
  3561.  move.w d5,(a1)+
  3562.  move.w d5,(a3)+
  3563.  bsr do32
  3564.  
  3565.  move.w #$106,(a1)+
  3566.  move.w #$106,(a3)+
  3567.  move.w #$4c42,d5
  3568.  or.w d3,d5
  3569.  and.w #$fffe,d5
  3570.  move.w d5,(a1)+
  3571.  move.w d5,(a3)+
  3572.  bsr do32
  3573.  
  3574.  move.w #$106,(a1)+
  3575.  move.w #$106,(a3)+
  3576.  move.w #$6c42,d5
  3577.  or.w d3,d5
  3578.  and.w #$fffe,d5
  3579.  move.w d5,(a1)+
  3580.  move.w d5,(a3)+
  3581.  bsr do32
  3582.  
  3583.  move.w startwait,(a1)+
  3584.  move.w #$fffe,(a1)+
  3585.  move.w endwait,(a1)+
  3586.  move.w #$ff00,(a1)+
  3587.  move.w startwait,(a3)+
  3588.  move.w #$fffe,(a3)+
  3589.  move.w endwait,(a3)+
  3590.  move.w #$ff00,(a3)+
  3591.  
  3592. ; move.l $1fe0000,(a1)+
  3593. ; move.l $1fe0000,(a3)+
  3594. ; move.l $1fe0000,(a1)+
  3595. ; move.l $1fe0000,(a3)+
  3596.  
  3597.  
  3598.  add.w #$300,startwait
  3599.  add.w #$300,endwait
  3600.  
  3601. ; move.l #$1060c42,(a1)+
  3602. ; move.l #$1060c42,(a3)+
  3603. ; move.w #$19e,(a1)+
  3604. ; move.w (a5),(a1)+
  3605. ; move.w #$19e,(a3)+
  3606. ; move.w (a5)+,(a3)+
  3607.  
  3608. **********************************
  3609.  
  3610.  adda.w #104*4,a0
  3611.  adda.w #104*4,a2
  3612.  dbra d0,.fillcop
  3613.  
  3614.  move.w #$38,fetchstart
  3615.  move.w #$b8,fetchstop
  3616.  move.w #$2c81,winstart
  3617.  move.w #$2cc1,winstop
  3618.  move.w #-40,modulo
  3619.  move.w #-40,modulo+4
  3620.  
  3621.  move.l #nullspr,d0
  3622.  move.w d0,s0l
  3623.  move.w d0,s1l
  3624.  move.w d0,s2l
  3625.  move.w d0,s3l
  3626.  move.w d0,s4l
  3627.  move.w d0,s5l
  3628.  move.w d0,s6l
  3629.  move.w d0,s7l
  3630.  swap d0
  3631.  move.w d0,s0h
  3632.  move.w d0,s1h
  3633.  move.w d0,s2h
  3634.  move.w d0,s3h
  3635.  move.w d0,s4h
  3636.  move.w d0,s5h
  3637.  move.w d0,s6h
  3638.  move.w d0,s7h 
  3639.  
  3640.  move.l #scrn+40,a0
  3641.  move.l #scrn+160,a1
  3642.  move.l #scrn+280,a2
  3643.  move.l #scrntab,a3
  3644.  move.w #319,d7    ; counter
  3645.  move.w #0,d1    ; xpos
  3646. .plotscrnloop:
  3647.  move.b (a3)+,d0
  3648.  move.w d1,d2
  3649.  asr.w #3,d2
  3650.  move.b d1,d3
  3651.  not.b d3
  3652.  bclr.b d3,-40(a0,d2.w)
  3653.  bclr.b d3,(a0,d2.w)
  3654.  bclr.b d3,40(a0,d2.w)
  3655.  bclr.b d3,-40(a1,d2.w)
  3656.  bclr.b d3,(a1,d2.w)
  3657.  bclr.b d3,40(a1,d2.w)
  3658.  bclr.b d3,-40(a2,d2.w)
  3659.  btst #0,d0
  3660.  beq.s .nobp1
  3661.  bset.b d3,-40(a0,d2.w)
  3662. .nobp1:
  3663.  btst #1,d0
  3664.  beq.s .nobp2
  3665.  bset.b d3,(a0,d2.w)
  3666. .nobp2:
  3667.  btst #2,d0
  3668.  beq.s .nobp3
  3669.  bset.b d3,40(a0,d2.w)
  3670. .nobp3:
  3671.  btst #3,d0
  3672.  beq.s .nobp4
  3673.  bset.b d3,-40(a1,d2.w)
  3674. .nobp4:
  3675.  btst #4,d0
  3676.  beq.s .nobp5
  3677.  bset.b d3,(a1,d2.w)
  3678. .nobp5:
  3679.  btst #5,d0
  3680.  beq.s .nobp6
  3681.  bset.b d3,40(a1,d2.w)
  3682. .nobp6:
  3683.  btst #6,d0
  3684.  beq.s .nobp7
  3685.  bset.b d3,-40(a2,d2.w)
  3686. .nobp7:
  3687.  
  3688.  addq #1,d1
  3689.  
  3690.  dbra d7,.plotscrnloop
  3691.  
  3692.  rts
  3693.  
  3694. CLEARKEYBOARD:
  3695.  move.l #KeyMap,a5
  3696.  moveq #0,d0
  3697.  move.w #15,d1
  3698. clrloo:
  3699.  move.l d0,(a5)+
  3700.  move.l d0,(a5)+
  3701.  move.l d0,(a5)+
  3702.  move.l d0,(a5)+
  3703.  dbra d1,clrloo
  3704.  rts
  3705.  
  3706. READCONTROLS: dc.w 0
  3707.  
  3708. tstststst: dc.w 0
  3709.  
  3710. BollocksRoom:
  3711.  dc.w -1
  3712.  ds.l 50
  3713.  
  3714. GUNYOFFS:
  3715.  dc.w 20
  3716.  dc.w 20
  3717.  dc.w 0
  3718.  dc.w 20
  3719.  dc.w 20
  3720.  dc.w 0
  3721.  dc.w 0
  3722.  dc.w 20
  3723.  
  3724. PLR1_BOBBLEY: dc.l 0
  3725.  
  3726. USEPLR1:
  3727.  
  3728. ***********************************
  3729.  
  3730.  move.l PLR1_Obj,a0 
  3731.  move.l ObjectPoints,a1
  3732.  move.l #ObjRotated,a2
  3733.  move.w (a0),d0
  3734.  move.l PLR1_xoff,(a1,d0.w*8)
  3735.  move.l PLR1_zoff,4(a1,d0.w*8)
  3736.  move.l PLR1_Roompt,a1
  3737.  
  3738.  moveq #0,d2
  3739.  move.b damagetaken(a0),d2
  3740.  beq .notbeenshot
  3741.  move.l #7*2116,hitcol
  3742.  sub.w d2,PLAYERONEHEALTH
  3743.  movem.l d0-d7/a0-a6,-(a7)
  3744.  move.b #$fb,IDNUM
  3745.  move.w #19,Samplenum
  3746.  clr.b notifplaying
  3747.  move.w #0,Noisex
  3748.  move.w #0,Noisez
  3749.  move.w #100,Noisevol
  3750.  jsr MakeSomeNoise
  3751.  
  3752.  movem.l (a7)+,d0-d7/a0-a6
  3753.  
  3754. .notbeenshot
  3755.  move.b #0,damagetaken(a0)
  3756.  move.b #10,numlives(a0)
  3757.  
  3758.  move.w p1_angpos,Facing(a0)
  3759.  move.b PLR1_StoodInTop,ObjInTop(a0)
  3760.  
  3761.  move.w (a1),12(a0)
  3762.  move.w (a1),d2
  3763.  move.l #ZoneBrightTable,a1
  3764.  move.l (a1,d2.w*4),d2
  3765.  tst.b PLR1_StoodInTop
  3766.  bne.s .okinbott
  3767.  swap d2
  3768. .okinbott:
  3769.  
  3770.  move.w d2,2(a0)
  3771.  
  3772.  move.l p1_yoff,d0
  3773.  move.l p1_height,d1
  3774.  asr.l #1,d1
  3775.  add.l d1,d0
  3776.  asr.l #7,d0
  3777.  move.w d0,4(a0)
  3778.  
  3779. ***********************************
  3780.  
  3781.  move.l PLR2_Obj,a0 
  3782.  
  3783.  move.w PLR2_angpos,d0
  3784.  and.w #8190,d0
  3785.  move.w d0,Facing(a0)
  3786.  
  3787.  jsr ViewpointToDraw
  3788.  asl.w #2,d0
  3789.  moveq #0,d1
  3790.  move.b p2_bobble,d1
  3791.  not.b d1
  3792.  lsr.b #3,d1
  3793.  and.b #$3,d1
  3794.  add.w d1,d0
  3795.  move.w d0,10(a0)
  3796.  move.w #10,8(a0)
  3797.  
  3798.  move.l ObjectPoints,a1
  3799.  move.l #ObjRotated,a2
  3800.  move.w (a0),d0
  3801.  move.l PLR2_xoff,(a1,d0.w*8)
  3802.  move.l PLR2_zoff,4(a1,d0.w*8)
  3803.  move.l PLR2_Roompt,a1
  3804.  
  3805.  moveq #0,d2
  3806.  move.b damagetaken(a0),d2
  3807.  beq .notbeenshot2
  3808.  sub.w d2,PLR2_energy
  3809. .notbeenshot2
  3810.  move.b #0,damagetaken(a0)
  3811.  move.b #10,numlives(a0)
  3812.  
  3813.  move.b PLR2_StoodInTop,ObjInTop(a0)
  3814.  
  3815.  move.w (a1),12(a0)
  3816.  move.w (a1),d2
  3817.  move.l #ZoneBrightTable,a1
  3818.  move.l (a1,d2.w*4),d2
  3819.  tst.b PLR2_StoodInTop
  3820.  bne.s .okinbott2
  3821.  swap d2
  3822. .okinbott2:
  3823.  
  3824.  move.w d2,2(a0)
  3825.  
  3826.  move.l p2_yoff,d0
  3827.  move.l p2_height,d1
  3828.  asr.l #1,d1
  3829.  add.l d1,d0
  3830.  asr.l #7,d0
  3831.  move.w d0,4(a0)
  3832.  
  3833. **********************************
  3834.  
  3835.  move.l PLR1_Obj,a0
  3836.  move.l PLR1_Roompt,a1
  3837.  
  3838.  move.w Facing(a0),d0
  3839.  add.w #4096,d0
  3840.  and.w #8190,d0
  3841.  move.w d0,Facing+128(a0)
  3842.  
  3843.  move.w (a1),12+128(a0)
  3844.  move.w (a1),GraphicRoom+128(a0)
  3845.  
  3846.  moveq #0,d0
  3847.  move.b p1_gunselected,d0
  3848.  
  3849.  move.l LINKFILE,a1
  3850.  add.l #GunObjects,a1
  3851.  move.w (a1,d0.w*2),d0
  3852.  
  3853.  move.b d0,TypeOfThing+128(a0)
  3854.  move.b #1,128+16(a0)
  3855.  
  3856.  move.w (a0),d0
  3857.  move.w 128(a0),d1
  3858.  move.l ObjectPoints,a1
  3859.  move.l (a1,d0.w*8),(a1,d1.w*8)
  3860.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  3861.  
  3862.  st WhichAnim+128(a0)
  3863.  
  3864.  move.l p1_yoff,d0
  3865.  move.l p1_height,d1
  3866.  asr.l #2,d1
  3867.  add.l #10*128,d1
  3868.  add.l d1,d0
  3869.  asr.l #7,d0
  3870.  move.w d0,4+128(a0)
  3871.  move.l PLR1_BOBBLEY,d1
  3872.  asr.l #8,d1
  3873.  move.l d1,d0
  3874.  asr.l #1,d0
  3875.  add.l d0,d1
  3876.  add.w d1,4+128(a0)
  3877.  
  3878.  move.b ObjInTop(a0),ObjInTop+128(a0)
  3879.  
  3880.  rts
  3881.  
  3882. DRAWINGUN:
  3883.  move.l #Objects+9*16,a0
  3884.  move.l 4(a0),a5    ; ptr
  3885.  move.l 8(a0),a2    ; frames
  3886.  move.l 12(a0),a4    ; pal
  3887.  move.l (a0),a0        ; wad
  3888.  
  3889.  move.l #GunAnims,a1
  3890.  move.l (a1,d0.w*8),a1
  3891.  move.w (a1,d1.w*2),d5    ; frame of anim
  3892.  
  3893.  move.l #GUNYOFFS,a1
  3894.  move.w (a1,d0.w*2),d7    ; yoff
  3895.  move.l FASTBUFFER,a6
  3896.  move.w d7,d6
  3897.  muls #320*2,d6
  3898.  add.l d6,a6    ; screen pointer
  3899.  
  3900.  asl.w #2,d0
  3901.  add.w d5,d0    ; frame
  3902.  move.w (a2,d0.w*4),d1    ; xoff
  3903.  
  3904.  lea (a5,d1.w),a5    ; right ptr
  3905.  
  3906.  move.w #95,d0
  3907.  bsr DRAWCHUNK
  3908. ; addq.w #4,a6
  3909. ; move.w #31,d0
  3910. ; bsr DRAWCHUNK
  3911. ; addq.w #4,a6
  3912. ; move.w #31,d0
  3913. ; bsr DRAWCHUNK
  3914.  rts
  3915.  
  3916.  
  3917. DRAWCHUNK:
  3918.  move.w #78,d3
  3919.  sub.w d7,d3
  3920.  move.l a6,a3
  3921.  move.b (a5),d2
  3922.  move.l (a5)+,d1
  3923.  bne.s .noblank
  3924.  addq #4,a6
  3925.  dbra d0,DRAWCHUNK 
  3926.  rts
  3927.  
  3928. .noblank:
  3929.  and.l #$ffffff,d1
  3930.  lea (a0,d1.l),a1
  3931.  cmp.b #1,d2
  3932.  bgt.s thirdd
  3933.  beq.s secc
  3934. .drawdown:
  3935.  move.w (a1)+,d2
  3936.  and.w #%11111,d2
  3937.  beq.s .itsblank
  3938.  move.w (a4,d2.w*2),d4
  3939.  move.w d4,d5
  3940.  swap d4
  3941.  move.w d5,d4
  3942.  move.l d4,(a3)
  3943.  move.l d4,320(a3)
  3944. .itsblank
  3945.  add.w #320*2,a3
  3946.  dbra d3,.drawdown
  3947.  
  3948.  addq #2,a6
  3949.  dbra d0,DRAWCHUNK
  3950.  rts
  3951.  
  3952. secc:
  3953. .drawdown:
  3954.  move.w (a1)+,d2
  3955.  lsr.w #5,d2
  3956.  and.w #%11111,d2
  3957.  beq.s .itsblank
  3958.  move.w (a4,d2.w*2),d4
  3959.  move.w d4,d5
  3960.  swap d4
  3961.  move.w d5,d4
  3962.  move.l d4,(a3)
  3963.  move.l d4,320*2(a3)
  3964. .itsblank
  3965.  add.w #320*2*2,a3
  3966.  dbra d3,.drawdown
  3967.  
  3968.  addq #4,a6
  3969.  dbra d0,DRAWCHUNK
  3970.  rts
  3971.  
  3972. thirdd:
  3973. .drawdown:
  3974.  move.b (a1),d2
  3975.  addq #2,a1
  3976.  lsr.b #2,d2
  3977.  and.w #%11111,d2
  3978.  beq.s .itsblank
  3979.  move.w (a4,d2.w*2),d4
  3980.  move.w d4,d5
  3981.  swap d4
  3982.  move.w d5,d4
  3983.  move.l d4,(a3)
  3984.  move.l d4,320*2(a3)
  3985. .itsblank
  3986.  add.w #320*2*2,a3
  3987.  dbra d3,.drawdown
  3988.  
  3989.  addq #4,a6
  3990.  dbra d0,DRAWCHUNK
  3991.  rts
  3992.  
  3993.  
  3994.  
  3995. ***************************************************
  3996. **************************************************
  3997.  
  3998. USEPLR2:
  3999.  
  4000.  PROTKCHECK a0
  4001.  
  4002. ***********************************
  4003.  
  4004.  move.l PLR2_Obj,a0 
  4005.  move.l ObjectPoints,a1
  4006.  move.l #ObjRotated,a2
  4007.  move.w (a0),d0
  4008.  move.l PLR2_xoff,(a1,d0.w*8)
  4009.  move.l PLR2_zoff,4(a1,d0.w*8)
  4010.  move.l PLR2_Roompt,a1
  4011.  
  4012.  moveq #0,d2
  4013.  move.b damagetaken(a0),d2
  4014.  beq .notbeenshot
  4015.  move.l #7*2116,hitcol
  4016.  sub.w d2,PLR2_energy
  4017.  movem.l d0-d7/a0-a6,-(a7)
  4018.  move.w #19,Samplenum
  4019.  clr.b notifplaying
  4020.  move.b #$fb,IDNUM
  4021.  move.w #0,Noisex
  4022.  move.w #0,Noisez
  4023.  move.w #100,Noisevol
  4024.  jsr MakeSomeNoise
  4025.  
  4026.  movem.l (a7)+,d0-d7/a0-a6
  4027.  
  4028. .notbeenshot
  4029.  move.b #0,damagetaken(a0)
  4030.  move.b #10,numlives(a0)
  4031.  
  4032.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4033.  
  4034.  move.w (a1),12(a0)
  4035.  move.w (a1),d2
  4036.  move.l #ZoneBrightTable,a1
  4037.  move.l (a1,d2.w*4),d2
  4038.  tst.b PLR2_StoodInTop
  4039.  bne.s .okinbott
  4040.  swap d2
  4041. .okinbott:
  4042.  
  4043.  move.w d2,2(a0)
  4044.  
  4045.  move.l PLR2_yoff,d0
  4046.  move.l p2_height,d1
  4047.  asr.l #1,d1
  4048.  add.l d1,d0
  4049.  asr.l #7,d0
  4050.  move.w d0,4(a0)
  4051.  
  4052. ***********************************
  4053.  
  4054.  move.l PLR1_Obj,a0 
  4055.  
  4056.  move.w PLR1_angpos,d0
  4057.  and.w #8190,d0
  4058.  move.w d0,Facing(a0)
  4059.  
  4060.  jsr ViewpointToDraw
  4061.  asl.w #2,d0
  4062.  moveq #0,d1
  4063.  move.b p1_bobble,d1
  4064.  not.b d1
  4065.  lsr.b #3,d1
  4066.  and.b #$3,d1
  4067.  add.w d1,d0
  4068.  move.w d0,10(a0)
  4069.  move.w #10,8(a0)
  4070.  
  4071.  move.l ObjectPoints,a1
  4072.  move.l #ObjRotated,a2
  4073.  move.w (a0),d0
  4074.  move.l PLR1_xoff,(a1,d0.w*8)
  4075.  move.l PLR1_zoff,4(a1,d0.w*8)
  4076.  move.l PLR1_Roompt,a1
  4077.  
  4078.  moveq #0,d2
  4079.  move.b damagetaken(a0),d2
  4080.  beq .notbeenshot2
  4081.  sub.w d2,PLAYERONEHEALTH
  4082. .notbeenshot2
  4083.  move.b #0,damagetaken(a0)
  4084.  move.b #10,numlives(a0)
  4085.  
  4086.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4087.  
  4088.  move.w (a1),12(a0)
  4089.  move.w (a1),d2
  4090.  move.l #ZoneBrightTable,a1
  4091.  move.l (a1,d2.w*4),d2
  4092.  tst.b PLR1_StoodInTop
  4093.  bne.s .okinbott2
  4094.  swap d2
  4095. .okinbott2:
  4096.  
  4097.  move.w d2,2(a0)
  4098.  
  4099.  move.l PLR1_yoff,d0
  4100.  move.l p1_height,d1
  4101.  asr.l #1,d1
  4102.  add.l d1,d0
  4103.  asr.l #7,d0
  4104.  move.w d0,4(a0)
  4105.  
  4106. **********************************
  4107.  
  4108.  move.l PLR2_Obj,a0
  4109.  move.w #-1,12+64(a0)
  4110.  
  4111.  rts
  4112.  
  4113.  
  4114. GunSelected: dc.b 0
  4115.  even
  4116.  
  4117. GunAnims:
  4118.  dc.l MachineAnim,3
  4119.  dc.l PlasmaAnim,5
  4120.  dc.l RocketAnim,5
  4121.  dc.l FlameThrowerAnim,5
  4122.  dc.l GrenadeAnim,12
  4123.  dc.l 0,0
  4124.  dc.l 0,0
  4125.  dc.l ShotGunAnim,12+19+11+20+1
  4126.  
  4127. MachineAnim:
  4128.  dc.w 0,1,2,3
  4129. PlasmaAnim:
  4130.  dc.w 0,1,2,3,3,3
  4131. RocketAnim:
  4132.  dc.w 0,1,2,3,3,3
  4133. FlameThrowerAnim:
  4134.  dc.w 0,1,2,3,3,3
  4135. GrenadeAnim:
  4136.  dc.w 0,1,1,1,1
  4137.  dc.w 2,2,2,2,3
  4138.  dc.w 3,3,3
  4139. ShotGunAnim:
  4140.  dc.w 0
  4141.  dcb.w 12,2
  4142.  dcb.w 19,1
  4143.  dcb.w 11,2
  4144.  dcb.w 20,0
  4145.  dc.w 3
  4146.  
  4147. GunData: dc.l 0
  4148.  
  4149. PLR1_GunData:
  4150. ; 0=Pistol 1=Big Gun
  4151. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  4152.  
  4153. ; VISIBLE/INSTANT (0/FF)
  4154. ; damage,gotgun(b)
  4155. ; Delay (w), Lifetime of bullet (w)
  4156. ; Click or hold down (0,1)
  4157. ; BulSpd: (w)
  4158.  
  4159. ;0
  4160.  dc.w 0
  4161. ;2
  4162.  dc.b 8,3
  4163. ;4
  4164.  dc.b 15
  4165. ;5
  4166.  dc.b -1
  4167. ;6
  4168.  dc.b 4,$ff
  4169. ;8
  4170.  dc.w 5,-1,1,0
  4171. ;16
  4172.  dc.w 0,0,0
  4173. ;22
  4174.  dc.w 1
  4175.  
  4176.  ds.w 4
  4177.  
  4178. ;PlasmaGun
  4179.  
  4180.  dc.w 0
  4181.  dc.b 8,1
  4182.  dc.b 20
  4183.  dc.b 0
  4184.  dc.b 16,0
  4185.  dc.w 10,-1,0,5
  4186.  dc.w 0,0,0
  4187.  dc.w 1
  4188.  
  4189.  ds.w 4
  4190.  
  4191. ;RocketLauncher
  4192.  
  4193.  dc.w 0
  4194.  dc.b 8,9
  4195.  dc.b 2
  4196.  dc.b 0
  4197.  dc.b 12,0
  4198.  dc.w 30,-1,0,5
  4199.  dc.w 0,0,0
  4200.  dc.w 1
  4201.  
  4202.  
  4203.  ds.w 4
  4204.  
  4205. ; FlameThrower
  4206.  
  4207.  dc.w 90*8
  4208.  dc.b 1,22
  4209.  dc.b 40
  4210.  dc.b 0
  4211.  dc.b 8,$0    
  4212.  dc.w 5,50,1,4
  4213.  dc.w 0,0,0
  4214.  dc.w 1
  4215.  
  4216.  ds.w 4
  4217.  
  4218. ;Grenade launcher
  4219.  
  4220.  
  4221.  dc.w 0
  4222.  dc.b 8,9
  4223.  dc.b 6
  4224.  dc.b 0
  4225.  dc.b 8,0
  4226.  dc.w 50,100,1,5
  4227.  dc.w 60,3
  4228.  dc.w -1000
  4229.  dc.w 1
  4230.  
  4231.  ds.w 4
  4232.  
  4233. ; WORMGUN
  4234.  
  4235.  dc.w 0
  4236.  dc.b 0,0
  4237.  dc.b 0
  4238.  dc.b 0,0
  4239.  dc.w 0,-1,0,5
  4240.  dc.w 0,0
  4241.  dc.w 0
  4242.  dc.w 1
  4243.  ds.w 4
  4244.  
  4245. ; ToughMarineGun
  4246.  
  4247.  dc.w 0
  4248.  dc.b 0,0
  4249.  dc.b 0
  4250.  dc.b 0,0
  4251.  dc.w 0,-1,0,5
  4252.  dc.w 0,0
  4253.  dc.w 0
  4254.  dc.w 1
  4255.  ds.w 4
  4256.  
  4257. ; Shotgun
  4258.  
  4259. ;0
  4260.  dc.w 0
  4261. ;2
  4262.  dc.b 8,21
  4263. ;4
  4264.  dc.b 15
  4265. ;5
  4266.  dc.b -1
  4267. ;6
  4268.  dc.b 4,0
  4269. ;8
  4270.  dc.w 50,-1,1,0
  4271. ;16
  4272.  dc.w 0,0,0
  4273. ;22
  4274.  dc.w 7
  4275.  
  4276.  ds.w 4
  4277.  
  4278. PLR2_GunData:
  4279. ; 0=Pistol 1=Big Gun
  4280. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  4281.  
  4282. ; VISIBLE/INSTANT (0/FF)
  4283. ; damage,gotgun(b)
  4284. ; Delay (w)
  4285.  
  4286. ;0
  4287.  dc.w 0
  4288. ;2
  4289.  dc.b 8,3
  4290. ;4
  4291.  dc.b 15
  4292. ;5
  4293.  dc.b -1
  4294. ;6
  4295.  dc.b 4,$ff
  4296. ;8
  4297.  dc.w 5,-1,1,0
  4298. ;16
  4299.  dc.w 0,0,0
  4300. ;22
  4301.  dc.w 1
  4302.  
  4303.  ds.w 4
  4304.  
  4305. ;PlasmaGun
  4306.  
  4307.  dc.w 0
  4308.  dc.b 8,1
  4309.  dc.b 20
  4310.  dc.b 0
  4311.  dc.b 16,0
  4312.  dc.w 10,-1,0,5
  4313.  dc.w 0,0,0
  4314.  dc.w 1
  4315.  
  4316.  ds.w 4
  4317.  
  4318. ;RocketLauncher
  4319.  
  4320.  dc.w 0
  4321.  dc.b 8,9
  4322.  dc.b 2
  4323.  dc.b 0
  4324.  dc.b 12,0
  4325.  dc.w 30,-1,0,5
  4326.  dc.w 0,0,0
  4327.  dc.w 1
  4328.  
  4329.  
  4330.  ds.w 4
  4331.  
  4332. ; FlameThrower
  4333.  
  4334.  dc.w 90*8
  4335.  dc.b 1,22
  4336.  dc.b 40
  4337.  dc.b 0
  4338.  dc.b 8,$0    
  4339.  dc.w 5,50,1,4
  4340.  dc.w 0,0,0
  4341.  dc.w 1
  4342.  
  4343.  ds.w 4
  4344.  
  4345. ;Grenade launcher
  4346.  
  4347.  
  4348.  dc.w 0
  4349.  dc.b 8,9
  4350.  dc.b 6
  4351.  dc.b 0
  4352.  dc.b 8,0
  4353.  dc.w 50,100,1,5
  4354.  dc.w 60,3
  4355.  dc.w -1000
  4356.  dc.w 1
  4357.  
  4358.  ds.w 4
  4359.  
  4360. ; WORMGUN
  4361.  
  4362.  dc.w 0
  4363.  dc.b 0,0
  4364.  dc.b 0
  4365.  dc.b 0,0
  4366.  dc.w 0,-1,0,5
  4367.  dc.w 0,0
  4368.  dc.w 0
  4369.  dc.w 1
  4370.  ds.w 4
  4371.  
  4372. ; ToughMarineGun
  4373.  
  4374.  dc.w 0
  4375.  dc.b 0,0
  4376.  dc.b 0
  4377.  dc.b 0,0
  4378.  dc.w 0,-1,0,5
  4379.  dc.w 0,0
  4380.  dc.w 0
  4381.  dc.w 1
  4382.  ds.w 4
  4383.  
  4384. ; Shotgun
  4385.  
  4386. ;0
  4387.  dc.w 0
  4388. ;2
  4389.  dc.b 8,21
  4390. ;4
  4391.  dc.b 15
  4392. ;5
  4393.  dc.b -1
  4394. ;6
  4395.  dc.b 4,0
  4396. ;8
  4397.  dc.w 50,-1,1,0
  4398. ;16
  4399.  dc.w 0,0,0
  4400. ;22
  4401.  dc.w 7
  4402.  
  4403.  ds.w 4
  4404.  
  4405.  
  4406.  
  4407. protA: dc.w 0
  4408.  
  4409. Path:
  4410. ; incbin "testpath"
  4411. endpath:
  4412. pathpt: dc.l Path
  4413.  
  4414.  
  4415. PLR1KEYS: dc.b 0
  4416. PLR1PATH: dc.b 0
  4417. PLR1MOUSE: dc.b -1
  4418. PLR1JOY: dc.b 0
  4419. PLR2KEYS: dc.b 0
  4420. PLR2PATH: dc.b 0
  4421. PLR2MOUSE: dc.b -1
  4422. PLR2JOY: dc.b 0
  4423.  
  4424.  even
  4425.  
  4426. PLR1_bobble: dc.w 0
  4427. PLR2_bobble: dc.w 0
  4428. xwobble: dc.l 0
  4429. xwobxoff: dc.w 0
  4430.  
  4431. xwobzoff: dc.w 0
  4432.  
  4433. PLR1_Control:
  4434.  
  4435. ; Take a snapshot of everything.
  4436.  
  4437.  move.l PLR1_xoff,d2
  4438.  move.l d2,PLR1_oldxoff
  4439.  move.l d2,oldx
  4440.  move.l PLR1_zoff,d3
  4441.  move.l d3,PLR1_oldzoff
  4442.  move.l d3,oldz
  4443.  move.l p1_xoff,d0
  4444.  move.l d0,PLR1_xoff
  4445.  move.l d0,newx
  4446.  move.l p1_zoff,d1
  4447.  move.l d1,newz
  4448.  move.l d1,PLR1_zoff
  4449.  
  4450.  move.l p1_height,PLR1_height
  4451.  
  4452.  sub.l d2,d0
  4453.  sub.l d3,d1
  4454.  move.l d0,xdiff
  4455.  move.l d1,zdiff
  4456.  move.w p1_angpos,d0
  4457.  move.w d0,PLR1_angpos
  4458.  
  4459.  move.l #SineTable,a1
  4460.  move.w (a1,d0.w),PLR1_sinval
  4461.  add.w #2048,d0
  4462.  and.w #8190,d0
  4463.  move.w (a1,d0.w),PLR1_cosval
  4464.  
  4465.  move.l p1_yoff,d0
  4466.  move.w p1_bobble,d1
  4467.  move.w (a1,d1.w),d1
  4468.  move.w d1,d3
  4469.  ble.s notnegative
  4470.  neg.w d1
  4471. notnegative:
  4472.  add.w #16384,d1
  4473.  asr.w #4,d1
  4474.  
  4475.  tst.b PLR1_Ducked
  4476.  bne.s .notdouble
  4477.  add.w d1,d1
  4478. .notdouble
  4479.  ext.l d1
  4480.  
  4481.  move.l d1,PLR1_BOBBLEY
  4482.  
  4483.  move.l PLR1_height,d4
  4484.  sub.l d1,d4
  4485.  add.l d1,d0
  4486.  
  4487.  cmp.b #'s',mors
  4488.  beq.s .otherwob
  4489.  asr.w #6,d3
  4490.  ext.l d3
  4491.  move.l d3,xwobble
  4492.  move.w PLR1_sinval,d1
  4493.  muls d3,d1
  4494.  move.w PLR1_cosval,d2
  4495.  muls d3,d2
  4496.  swap d1
  4497.  swap d2
  4498.  asr.w #7,d1
  4499.  move.w d1,xwobxoff
  4500.  asr.w #7,d2
  4501.  neg.w d2
  4502.  move.w d2,xwobzoff
  4503. .otherwob
  4504.  
  4505.  move.l d0,PLR1_yoff
  4506.  move.l d0,newy
  4507.  move.l d0,oldy
  4508.  
  4509.  move.l d4,thingheight
  4510.  move.l #40*256,StepUpVal
  4511.  tst.b PLR1_Ducked
  4512.  beq.s .okbigstep
  4513.  move.l #10*256,StepUpVal
  4514. .okbigstep:
  4515.  
  4516.  move.l #$1000000,StepDownVal
  4517.  
  4518.  move.l PLR1_Roompt,a0
  4519.  move.w ToTelZone(a0),d0
  4520.  blt .noteleport
  4521.  
  4522.  move.w ToTelX(a0),newx
  4523.  move.w ToTelZ(a0),newz
  4524.  move.w #-1,CollId
  4525.  move.l #%111111111111111111,CollideFlags
  4526.  bsr Collision
  4527.  tst.b hitwall
  4528.  beq.s .teleport
  4529.  
  4530.  move.w PLR1_xoff,newx
  4531.  move.w PLR1_zoff,newz
  4532.  bra .noteleport
  4533.  
  4534. .teleport:
  4535.  
  4536.  st PLR1_TELEPORTED
  4537.  
  4538.  move.l PLR1_Roompt,a0
  4539.  move.w ToTelZone(a0),d0
  4540.  move.w ToTelX(a0),PLR1_xoff
  4541.  move.w ToTelZ(a0),PLR1_zoff
  4542.  move.l PLR1_yoff,d1
  4543.  sub.l ToZoneFloor(a0),d1
  4544.  move.l ZoneAdds,a0
  4545.  move.l (a0,d0.w*4),a0
  4546.  add.l LEVELDATA,a0
  4547.  move.l a0,PLR1_Roompt
  4548.  add.l ToZoneFloor(a0),d1
  4549.  move.l d1,PLR1s_yoff
  4550.  move.l d1,PLR1_yoff
  4551.  move.l d1,PLR1s_tyoff
  4552.  move.l PLR1_xoff,PLR1s_xoff
  4553.  move.l PLR1_zoff,PLR1s_zoff
  4554.  
  4555.  SAVEREGS
  4556.  move.w #0,Noisex
  4557.  move.w #0,Noisez
  4558.  move.w #26,Samplenum
  4559.  move.w #100,Noisevol
  4560.  move.b #$fa,IDNUM
  4561.  jsr MakeSomeNoise
  4562.  GETREGS
  4563.  
  4564.  bra .cantmove
  4565.  
  4566. .noteleport:
  4567.  
  4568.  move.l PLR1_Roompt,objroom
  4569.  move.w #%100000000,wallflags
  4570.  move.b PLR1_StoodInTop,StoodInTop
  4571.  
  4572.  move.l #%1011111110111000011,CollideFlags
  4573.  move.w #-1,CollId
  4574.  
  4575.  bsr Collision
  4576.  tst.b hitwall
  4577.  beq.s .nothitanything
  4578.  move.w oldx,PLR1_xoff
  4579.  move.w oldz,PLR1_zoff
  4580.  move.l PLR1_xoff,PLR1s_xoff
  4581.  move.l PLR1_zoff,PLR1s_zoff
  4582.  bra .cantmove
  4583. .nothitanything:
  4584.  
  4585.  move.w #40,extlen
  4586.  move.b #0,awayfromwall
  4587.  
  4588.  clr.b exitfirst
  4589.  clr.b wallbounce
  4590.  bsr MoveObject
  4591.  move.b StoodInTop,PLR1_StoodInTop
  4592.  move.l objroom,PLR1_Roompt
  4593.  move.w newx,PLR1_xoff
  4594.  move.w newz,PLR1_zoff
  4595.  move.l PLR1_xoff,PLR1s_xoff
  4596.  move.l PLR1_zoff,PLR1s_zoff
  4597.  
  4598. .cantmove:
  4599.  
  4600.  move.l PLR1_Roompt,a0
  4601.  
  4602.  move.l ToZoneFloor(a0),d0
  4603.  tst.b PLR1_StoodInTop
  4604.  beq.s notintop
  4605.  move.l ToUpperFloor(a0),d0
  4606. notintop:
  4607.  
  4608.  adda.w #ToZonePts,a0
  4609.  sub.l PLR1_height,d0
  4610.  move.l d0,PLR1s_tyoff
  4611.  move.w p1_angpos,tmpangpos
  4612.  
  4613. ; move.l (a0),a0        ; jump to viewpoint list
  4614.  * A0 is pointing at a pointer to list of points to rotate
  4615.  move.w (a0)+,d1
  4616.  ext.l d1
  4617.  add.l PLR1_Roompt,d1
  4618.  move.l d1,PLR1_PointsToRotatePtr
  4619.  tst.w (a0)+
  4620.  sne.s DRAWNGRAPHTOP
  4621.  beq.s nobackgraphics
  4622.  cmp.b #'s',mors
  4623.  beq.s nobackgraphics
  4624.  move.l a0,-(a7)
  4625.  jsr putinbackdrop 
  4626.  move.l (a7)+,a0
  4627. nobackgraphics:
  4628.  adda.w #10,a0
  4629.  move.l a0,PLR1_ListOfGraphRooms
  4630.  
  4631. *************************************************
  4632.  rts
  4633.  
  4634. DRAWNGRAPHTOP
  4635.  dc.w 0 
  4636. tstzone: dc.l 0
  4637. CollId: dc.w 0
  4638.  
  4639. PLR2_Control:
  4640.  
  4641.  PROTLCHECK a0
  4642.  
  4643. ; Take a snapshot of everything.
  4644.  
  4645.  move.l PLR2_xoff,d2
  4646.  move.l d2,PLR2_oldxoff
  4647.  move.l d2,oldx
  4648.  move.l PLR2_zoff,d3
  4649.  move.l d3,PLR2_oldzoff
  4650.  move.l d3,oldz
  4651.  move.l p2_xoff,d0
  4652.  move.l d0,PLR2_xoff
  4653.  move.l d0,newx
  4654.  move.l p2_zoff,d1
  4655.  move.l d1,newz
  4656.  move.l d1,PLR2_zoff
  4657.  
  4658.  move.l p2_height,PLR2_height
  4659.  
  4660.  sub.l d2,d0
  4661.  sub.l d3,d1
  4662.  move.l d0,xdiff
  4663.  move.l d1,zdiff
  4664.  move.w p2_angpos,d0
  4665.  move.w d0,PLR2_angpos
  4666.  
  4667.  move.l #SineTable,a1
  4668.  move.w (a1,d0.w),PLR2_sinval
  4669.  add.w #2048,d0
  4670.  and.w #8190,d0
  4671.  move.w (a1,d0.w),PLR2_cosval
  4672.  
  4673.  move.l p2_yoff,d0
  4674.  move.w p2_bobble,d1
  4675.  move.w (a1,d1.w),d1
  4676.  move.w d1,d3
  4677.  ble.s .notnegative
  4678.  neg.w d1
  4679. .notnegative:
  4680.  add.w #16384,d1
  4681.  asr.w #4,d1
  4682.  add.w d1,d1
  4683.  ext.l d1
  4684.  move.l PLR2_height,d4
  4685.  sub.l d1,d4
  4686.  add.l d1,d0
  4687.  
  4688.  cmp.b #'s',mors
  4689.  bne.s .otherwob
  4690.  asr.w #6,d3
  4691.  ext.l d3
  4692.  move.l d3,xwobble
  4693.  move.w PLR2_sinval,d1
  4694.  muls d3,d1
  4695.  move.w PLR2_cosval,d2
  4696.  muls d3,d2
  4697.  swap d1
  4698.  swap d2
  4699.  asr.w #7,d1
  4700.  move.w d1,xwobxoff
  4701.  asr.w #7,d2
  4702.  neg.w d2
  4703.  move.w d2,xwobzoff
  4704. .otherwob
  4705.  
  4706.  move.l d0,PLR2_yoff
  4707.  move.l d0,newy
  4708.  move.l d0,oldy
  4709.  
  4710.  move.l d4,thingheight
  4711.  move.l #40*256,StepUpVal
  4712.  tst.b PLR2_Ducked
  4713.  beq.s .okbigstep
  4714.  move.l #10*256,StepUpVal
  4715. .okbigstep:
  4716.  
  4717.  move.l #$1000000,StepDownVal
  4718.  
  4719.  move.l PLR2_Roompt,a0
  4720.  move.w ToTelZone(a0),d0
  4721.  blt .noteleport
  4722.  
  4723.  move.w ToTelX(a0),newx
  4724.  move.w ToTelZ(a0),newz
  4725.  move.w #-1,CollId
  4726.  move.l #%111111111111111111,CollideFlags
  4727.  bsr Collision
  4728.  tst.b hitwall
  4729.  beq.s .teleport
  4730.  
  4731.  move.w PLR2_xoff,newx
  4732.  move.w PLR2_zoff,newz
  4733.  bra .noteleport
  4734.  
  4735. .teleport:
  4736.  
  4737.  move.l PLR2_Roompt,a0
  4738.  move.w ToTelZone(a0),d0
  4739.  move.w ToTelX(a0),PLR2_xoff
  4740.  move.w ToTelZ(a0),PLR2_zoff
  4741.  move.l PLR2_yoff,d1
  4742.  sub.l ToZoneFloor(a0),d1
  4743.  move.l ZoneAdds,a0
  4744.  move.l (a0,d0.w*4),a0
  4745.  add.l LEVELDATA,a0
  4746.  move.l a0,PLR2_Roompt
  4747.  add.l ToZoneFloor(a0),d1
  4748.  move.l d1,PLR2s_yoff
  4749.  move.l d1,PLR2_yoff
  4750.  move.l d1,PLR2s_tyoff
  4751.  move.l PLR2_xoff,PLR2s_xoff
  4752.  move.l PLR2_zoff,PLR2s_zoff
  4753.  
  4754.  SAVEREGS
  4755.  move.w #0,Noisex
  4756.  move.w #0,Noisez
  4757.  move.w #26,Samplenum
  4758.  move.w #100,Noisevol
  4759.  move.b #$fa,IDNUM
  4760.  jsr MakeSomeNoise
  4761.  GETREGS
  4762.  
  4763.  bra .cantmove
  4764.  
  4765. .noteleport:
  4766.  
  4767.  move.l PLR2_Roompt,objroom
  4768.  move.w #%100000000000,wallflags
  4769.  move.b PLR2_StoodInTop,StoodInTop
  4770.  
  4771.  move.l #%1011111010111100011,CollideFlags
  4772.  move.w #-1,CollId
  4773.  
  4774.  bsr Collision
  4775.  tst.b hitwall
  4776.  beq.s .nothitanything
  4777.  move.w oldx,PLR2_xoff
  4778.  move.w oldz,PLR2_zoff
  4779.  move.l PLR2_xoff,PLR2s_xoff
  4780.  move.l PLR2_zoff,PLR2s_zoff
  4781.  bra .cantmove
  4782. .nothitanything:
  4783.  
  4784.  move.w #40,extlen
  4785.  move.b #0,awayfromwall
  4786.  
  4787.  clr.b exitfirst
  4788.  clr.b wallbounce
  4789.  bsr MoveObject
  4790.  move.b StoodInTop,PLR2_StoodInTop
  4791.  move.l objroom,PLR2_Roompt
  4792.  move.w newx,PLR2_xoff
  4793.  move.w newz,PLR2_zoff
  4794.  move.l PLR2_xoff,PLR2s_xoff
  4795.  move.l PLR2_zoff,PLR2s_zoff
  4796.  
  4797. .cantmove
  4798.  
  4799.  move.l PLR2_Roompt,a0
  4800.  
  4801.  move.l ToZoneFloor(a0),d0
  4802.  tst.b PLR2_StoodInTop
  4803.  beq.s .notintop
  4804.  move.l ToUpperFloor(a0),d0
  4805. .notintop:
  4806.  
  4807.  adda.w #ToZonePts,a0
  4808.  sub.l PLR2_height,d0
  4809.  move.l d0,PLR2s_tyoff
  4810.  move.w p2_angpos,tmpangpos
  4811.  
  4812. ; move.l (a0),a0        ; jump to viewpoint list
  4813.  * A0 is pointing at a pointer to list of points to rotate
  4814.  move.w (a0)+,d1
  4815.  ext.l d1
  4816.  add.l PLR2_Roompt,d1
  4817.  move.l d1,PLR2_PointsToRotatePtr
  4818.  tst.w (a0)+
  4819.  beq.s .nobackgraphics
  4820.  cmp.b #'s',mors
  4821.  bne.s .nobackgraphics
  4822.  move.l a0,-(a7)
  4823.  jsr putinbackdrop 
  4824.  move.l (a7)+,a0
  4825. .nobackgraphics:
  4826.  adda.w #10,a0
  4827.  move.l a0,PLR2_ListOfGraphRooms
  4828.  
  4829. *****************************************************
  4830.  
  4831.  rts
  4832.  
  4833.  
  4834. KeyMap: ds.b 256
  4835.  
  4836. fillscrnwater:
  4837.  dc.w 0
  4838. DONTDOGUN:
  4839.  dc.w 0
  4840.  
  4841. temptemp: ds.l 200
  4842. temptempptr: dc.l 0
  4843.  
  4844. DrawDisplay:
  4845.  
  4846.  move.l #temptemp,temptempptr
  4847.  
  4848.  clr.b fillscrnwater
  4849.  
  4850.  move.l #SineTable,a0
  4851.  move.w angpos,d0
  4852.  move.w (a0,d0.w),d6
  4853.  adda.w #2048,a0
  4854.  move.w (a0,d0.w),d7
  4855.  move.w d6,sinval
  4856.  move.w d7,cosval
  4857.  
  4858.  move.l #KeyMap,a5
  4859.  moveq #0,d5
  4860.  move.b look_behind_key,d5
  4861.  tst.b (a5,d5.w)
  4862.  sne DONTDOGUN
  4863.  beq.s .nolookback
  4864.  neg.w cosval
  4865.  neg.w sinval
  4866. .nolookback:
  4867.  
  4868.  
  4869.  move.l yoff,d0
  4870.  asr.l #8,d0
  4871.  move.w d0,d1
  4872.  add.w #256-32,d1
  4873.  and.w #255,d1
  4874.  move.w d1,wallyoff
  4875.  move.l yoff,d0
  4876.  asr.l #6,d0
  4877.  move.w d0,flooryoff
  4878.  
  4879.  move.w xoff,d6
  4880.  move.w d6,d3
  4881.  asr.w #1,d3
  4882.  add.w d3,d6
  4883.  asr.w #1,d6
  4884.  move.w d6,xoff34
  4885.  
  4886.  move.w zoff,d6
  4887.  move.w d6,d3
  4888.  asr.w #1,d3
  4889.  add.w d3,d6
  4890.  asr.w #1,d6
  4891.  move.w d6,zoff34
  4892.  
  4893.  bsr RotateLevelPts
  4894.  bsr RotateObjectPts
  4895.  bsr CalcPLR1InLine
  4896.  
  4897.  
  4898.  cmp.b #'n',mors
  4899.  bne.s doplr2too
  4900.  move.l PLR2_Obj,a0
  4901.  move.w #-1,12(a0)
  4902.  move.w #-1,GraphicRoom(a0)
  4903.  bra noplr2either
  4904.  
  4905. doplr2too:
  4906.  bsr CalcPLR2InLine
  4907. noplr2either:
  4908.  
  4909.  move.l endoflist,a0
  4910. subroomloop:
  4911.  move.w -(a0),d7
  4912.  blt jumpoutofrooms
  4913.  
  4914. ; bsr setlrclip
  4915. ; move.w leftclip,d0
  4916. ; cmp.w rightclip,d0
  4917. ; bge subroomloop
  4918.  move.l a0,-(a7)
  4919.  
  4920.  move.l ZoneAdds,a0
  4921.  move.l (a0,d7.w*4),a0
  4922.  add.l LEVELDATA,a0
  4923.  move.l ToZoneRoof(a0),SplitHeight
  4924.  move.l a0,ROOMBACK
  4925.  
  4926.  move.l ZoneGraphAdds,a0
  4927.  move.l 4(a0,d7.w*8),a2
  4928.  move.l (a0,d7.w*8),a0
  4929.  
  4930.  add.l LEVELGRAPHICS,a0
  4931.  add.l LEVELGRAPHICS,a2
  4932.  move.l a2,ThisRoomToDraw+4
  4933.  move.l a0,ThisRoomToDraw
  4934.  
  4935.  move.l ListOfGraphRooms,a1
  4936.  
  4937.  
  4938.  
  4939. finditit:
  4940.  tst.w (a1)
  4941.  blt nomoretodoatall
  4942.  cmp.w (a1),d7
  4943.  beq outoffind
  4944.  adda.w #8,a1
  4945.  bra finditit
  4946.  
  4947. outoffind:
  4948.  
  4949.  move.l a1,-(a7)
  4950.  
  4951.  
  4952.  move.w #0,leftclip
  4953.  move.w RIGHTX,rightclip
  4954.  moveq #0,d7
  4955.  move.w 2(a1),d7
  4956.  blt.s outofrcliplop
  4957.  move.l LEVELCLIPS,a0
  4958.  lea (a0,d7.l*2),a0
  4959.  
  4960.  tst.w (a0)
  4961.  blt outoflcliplop
  4962.  
  4963.  bsr NEWsetlclip
  4964.  
  4965. intolcliplop:        ; clips
  4966.  tst.w (a0)
  4967.  blt outoflcliplop
  4968.  
  4969.  bsr NEWsetlclip 
  4970.  bra intolcliplop
  4971.  
  4972. outoflcliplop:
  4973.  
  4974.  addq #2,a0
  4975.  
  4976.  tst.w (a0)
  4977.  blt outofrcliplop
  4978.  
  4979.  bsr NEWsetrclip
  4980.  
  4981. intorcliplop:        ; clips
  4982.  tst.w (a0)
  4983.  blt outofrcliplop
  4984.  
  4985.  bsr NEWsetrclip 
  4986.  bra intorcliplop
  4987.  
  4988. outofrcliplop:
  4989.  
  4990.  
  4991.  move.w leftclip,d0
  4992.  cmp.w RIGHTX,d0
  4993.  bge dontbothercantseeit
  4994.  move.w rightclip,d1
  4995.  blt dontbothercantseeit
  4996.  cmp.w d1,d0
  4997.  bge dontbothercantseeit
  4998.  
  4999.  move.l yoff,d0
  5000.  cmp.l SplitHeight,d0
  5001.  blt botfirst
  5002.  
  5003.  move.l ThisRoomToDraw+4,a0
  5004.  cmp.l LEVELGRAPHICS,a0
  5005.  beq.s noupperroom
  5006.  st DOUPPER
  5007.  
  5008.  move.l ROOMBACK,a1
  5009.  move.l ToUpperRoof(a1),TOPOFROOM
  5010.  move.l ToUpperFloor(a1),BOTOFROOM
  5011.  
  5012.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5013.  bsr dothisroom
  5014. noupperroom:
  5015.  move.l ThisRoomToDraw,a0
  5016.  clr.b DOUPPER
  5017.  move.l #CurrentPointBrights,PointBrightsPtr
  5018.  
  5019.  move.l ROOMBACK,a1
  5020.  move.l ToZoneRoof(a1),d0
  5021.  move.l d0,TOPOFROOM
  5022.  move.l ToZoneFloor(a1),d1
  5023.  move.l d1,BOTOFROOM
  5024.  
  5025.  move.l ToZoneWater(a1),d2
  5026.  cmp.l yoff,d2
  5027.  blt.s .abovefirst
  5028.  move.l d2,BEFOREWATTOP
  5029.  move.l d1,BEFOREWATBOT
  5030.  move.l d2,AFTERWATBOT
  5031.  move.l d0,AFTERWATTOP
  5032.  bra.s .belowfirst
  5033. .abovefirst:
  5034.  move.l d0,BEFOREWATTOP
  5035.  move.l d2,BEFOREWATBOT
  5036.  move.l d1,AFTERWATBOT
  5037.  move.l d2,AFTERWATTOP
  5038. .belowfirst:
  5039.  
  5040.  bsr dothisroom
  5041.  
  5042.  bra dontbothercantseeit
  5043. botfirst:
  5044.  
  5045.  move.l ThisRoomToDraw,a0
  5046.  clr.b DOUPPER
  5047.  move.l #CurrentPointBrights,PointBrightsPtr
  5048.  
  5049.  move.l ROOMBACK,a1
  5050.  move.l ToZoneRoof(a1),d0
  5051.  move.l d0,TOPOFROOM
  5052.  move.l ToZoneFloor(a1),d1
  5053.  move.l d1,BOTOFROOM
  5054.  
  5055.  move.l ToZoneWater(a1),d2
  5056.  cmp.l yoff,d2
  5057.  blt.s .abovefirst
  5058.  move.l d2,BEFOREWATTOP
  5059.  move.l d1,BEFOREWATBOT
  5060.  move.l d2,AFTERWATBOT
  5061.  move.l d0,AFTERWATTOP
  5062.  bra.s .belowfirst
  5063. .abovefirst:
  5064.  move.l d0,BEFOREWATTOP
  5065.  move.l d2,BEFOREWATBOT
  5066.  move.l d1,AFTERWATBOT
  5067.  move.l d2,AFTERWATTOP
  5068. .belowfirst:
  5069.  
  5070.  
  5071.  bsr dothisroom
  5072.  move.l ThisRoomToDraw+4,a0
  5073.  cmp.l LEVELGRAPHICS,a0
  5074.  beq.s noupperroom2
  5075.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5076.  
  5077.  move.l ROOMBACK,a1
  5078.  move.l ToUpperRoof(a1),TOPOFROOM
  5079.  move.l ToUpperFloor(a1),BOTOFROOM
  5080.  
  5081.  st DOUPPER
  5082.  bsr dothisroom
  5083. noupperroom2:
  5084.  
  5085. dontbothercantseeit:
  5086. pastemp:
  5087.  
  5088.  move.l (a7)+,a1
  5089.  move.l ThisRoomToDraw,a0
  5090.  move.w (a0),d7
  5091.  
  5092.  adda.w #8,a1
  5093.  bra finditit
  5094.  
  5095. nomoretodoatall:
  5096.  
  5097.  move.l (a7)+,a0
  5098.  
  5099.  bra subroomloop
  5100.  
  5101. jumpoutofrooms:
  5102.  
  5103.  
  5104.  tst.b DONTDOGUN
  5105.  bne NOGUNLOOK
  5106.  
  5107.  cmp.b #'s',mors
  5108.  beq.s drawslavegun
  5109.  
  5110.  moveq #0,d0
  5111.  move.b PLR1_GunSelected,d0
  5112.  moveq #0,d1
  5113.  move.b PLR1_GunFrame,d1
  5114. ; bsr DRAWINGUN
  5115.  bra drawngun
  5116.  
  5117. drawslavegun
  5118.  moveq #0,d0
  5119.  move.b PLR2_GunSelected,d0
  5120.  moveq #0,d1
  5121.  move.b PLR2_GunFrame,d1
  5122. ; bsr DRAWINGUN
  5123.  
  5124. drawngun:
  5125.  
  5126. NOGUNLOOK:
  5127.  
  5128.  moveq #0,d1
  5129.  move.b PLR1_GunFrame,d1
  5130.  sub.w TempFrames,d1
  5131.  bgt.s .nn
  5132.  moveq #0,d1
  5133. .nn
  5134.  move.b d1,PLR1_GunFrame
  5135.  
  5136.  ble.s .donefire
  5137.  sub.b #1,PLR1_GunFrame
  5138. .donefire:
  5139.  
  5140.  moveq #0,d1
  5141.  move.b PLR2_GunFrame,d1
  5142.  sub.w TempFrames,d1
  5143.  bgt.s .nn2
  5144.  moveq #0,d1
  5145. .nn2
  5146.  move.b d2,PLR2_GunFrame
  5147.  
  5148.  ble.s .donefire2
  5149.  sub.b #1,PLR2_GunFrame
  5150. .donefire2:
  5151.  
  5152.  tst.b DOANYWATER
  5153.  beq.s nowaterfull
  5154.  
  5155.  move.w #239,d0
  5156.  move.l FASTBUFFER,a0
  5157.  tst.b fillscrnwater
  5158.  beq nowaterfull
  5159.  bgt oknothalf
  5160.  moveq #119,d0
  5161.  add.l #320*120*2,a0
  5162. oknothalf:
  5163.  
  5164.  bclr.b #1,$bfe001
  5165.  
  5166.  move.l #brightentab+512*4,a2
  5167.  moveq #0,d2
  5168.  
  5169. fw:
  5170.  move.w #287,d1
  5171. fwa:
  5172.  move.b (a0),d2
  5173.  move.w (a2,d2.w*2),(a0)+
  5174.  dbra d1,fwa
  5175.  add.w #32*2,a0
  5176.  dbra d0,fw
  5177.  
  5178. ; move.l frompt,a0
  5179. ; add.l #104*4*60,a0
  5180. ; move.w #31,d0
  5181. ;fw:
  5182. ; move.w d5,d1
  5183. ; move.l a0,a1
  5184. ;fwd:
  5185. ;val SET 104*4*19
  5186. ; REPT 20
  5187. ; and.w #$ff,val(a1)
  5188. ;val SET val-104*4
  5189. ; ENDR
  5190. ; sub.l #104*4*20,a1
  5191. ; dbra d1,fwd
  5192. ; addq #4,a0
  5193. ; dbra d0,fw
  5194. ;
  5195. ; addq #4,a0
  5196. ;
  5197. ; move.w #31,d0
  5198. ;sw:
  5199. ; move.w d5,d1
  5200. ; move.l a0,a1
  5201. ;swd:
  5202. ;val SET 104*4*19
  5203. ; REPT 20
  5204. ; and.w #$ff,val(a1)
  5205. ;val SET val-104*4
  5206. ; ENDR
  5207. ; sub.l #104*4*20,a1
  5208. ; dbra d1,swd
  5209. ; addq #4,a0
  5210. ; dbra d0,sw
  5211. ;
  5212. ; addq #4,a0
  5213. ;
  5214. ; move.w #31,d0
  5215. ;tw:
  5216. ; move.w d5,d1
  5217. ; move.l a0,a1
  5218. ;twd:
  5219. ;val SET 104*4*19
  5220. ; REPT 20
  5221. ; and.w #$ff,val(a1)
  5222. ;val SET val-104*4
  5223. ; ENDR
  5224. ; sub.l #104*4*20,a1
  5225. ; dbra d1,twd
  5226. ; addq #4,a0
  5227. ; dbra d0,tw
  5228. ;
  5229.  rts
  5230.  
  5231. nowaterfull:
  5232.  bset.b #1,$bfe001
  5233.  rts
  5234.  
  5235. prot9: dc.w 0
  5236.  
  5237. TempBuffer: ds.l 100 
  5238.  
  5239. prot8: dc.w 0
  5240.  
  5241. ClipTable: ds.l 30
  5242. EndOfClipPt: dc.l 0
  5243. DOUPPER: dc.w 0
  5244.  
  5245. RealTable:
  5246.  dc.l prot1-78935450
  5247.  dc.l prot2-78935450
  5248.  dc.l prot3-78935450
  5249.  dc.l prot4-78935450
  5250.  dc.l prot5-78935450
  5251.  dc.l prot6-78935450
  5252.  dc.l prot7-78935450
  5253.  dc.l prot8-78935450
  5254.  dc.l prot9-78935450
  5255.  dc.l protA-78935450
  5256.  
  5257. dothisroom
  5258.  
  5259.  move.w (a0)+,d0
  5260.  move.w d0,currzone
  5261.  move.w d0,d1
  5262.  muls #40,d1
  5263.  add.l #BIGMAP,d1
  5264.  move.l d1,BIGPTR
  5265.  move.w d0,d1
  5266.  ext.l d1
  5267.  asl.w #2,d1
  5268.  add.l #COMPACTMAP,d1
  5269.  move.l d1,COMPACTPTR
  5270.  add.l #4,d1
  5271.  cmp.l LASTZONE,d1
  5272.  ble.s .nochange
  5273.  move.l d1,LASTZONE
  5274. .nochange:
  5275.  
  5276.  move.l #ZoneBrightTable,a1
  5277.  move.l (a1,d0.w*4),d1
  5278.  tst.b DOUPPER
  5279.  bne.s .okbot
  5280.  swap d1
  5281. .okbot:
  5282.  move.w d1,ZoneBright
  5283.  
  5284. polyloop:
  5285.  move.w (a0)+,d0
  5286.  move.w d0,WALLIDENT
  5287.  and.w #$ff,d0
  5288.  tst.b d0
  5289.  blt jumpoutofloop
  5290.  beq itsawall
  5291.  cmp.w #3,d0
  5292.  beq itsasetclip
  5293.  blt itsafloor
  5294.  cmp.w #4,d0
  5295.  beq itsanobject
  5296.  cmp.w #5,d0
  5297.  beq itsanarc
  5298.  cmp.w #6,d0
  5299.  beq itsalightbeam
  5300.  cmp.w #7,d0
  5301.  beq.s itswater
  5302.  cmp.w #9,d0
  5303.  ble itsachunkyfloor
  5304.  cmp.w #11,d0
  5305.  ble itsabumpyfloor
  5306.  cmp.w #12,d0
  5307.  beq.s itsbackdrop
  5308.  cmp.w #13,d0
  5309.  beq.s itsaseewall
  5310.  
  5311.  bra polyloop
  5312.  
  5313. itsaseewall:
  5314.  st seethru
  5315.  jsr itsawalldraw
  5316.  bra polyloop
  5317.  
  5318. itsbackdrop:
  5319.  jsr putinbackdrop
  5320.  bra polyloop
  5321.  
  5322. itswater:
  5323.  PROTHCHECK
  5324.  move.w #2,SMALLIT
  5325.  move.w #3,d0
  5326.  clr.b gourfloor
  5327.  move.l #FloorLine,LineToUse
  5328.  st usewater
  5329.  clr.b usebumps
  5330.  jsr itsafloordraw
  5331.  bra polyloop
  5332.  
  5333. itsanarc:
  5334.  jsr CurveDraw
  5335.  bra polyloop
  5336.  
  5337. itsanobject:
  5338.  jsr ObjDraw
  5339.  bra polyloop
  5340.  
  5341. itsalightbeam:
  5342.  jsr LightDraw
  5343.  bra polyloop
  5344.  
  5345. itsabumpyfloor:
  5346.  move.w #1,SMALLIT
  5347.  sub.w #9,d0
  5348.  st usebumps
  5349.  st smoothbumps
  5350.  clr.b usewater
  5351.  move.l #BumpLine,LineToUse
  5352.  jsr itsafloordraw
  5353.  bra polyloop
  5354.  
  5355. itsachunkyfloor:
  5356.  move.w #1,SMALLIT
  5357.  subq.w #7,d0
  5358.  st usebumps
  5359.  sub.w #12,topclip
  5360. ; add.w #10,botclip
  5361.  clr.b smoothbumps
  5362.  clr.b usewater
  5363.  move.l #BumpLine,LineToUse
  5364.  jsr itsafloordraw
  5365.  add.w #12,topclip
  5366. ; sub.w #10,botclip
  5367.  bra polyloop 
  5368.  
  5369. itsafloor:
  5370.  
  5371.  move.l PointBrightsPtr,FloorPtBrights
  5372.  
  5373.  move.w currzone,d1
  5374.  muls #80,d1
  5375.  
  5376.  cmp.w #2,d0
  5377.  bne.s .nfl
  5378.  add.l #2,d1
  5379. .nfl
  5380.  add.l d1,FloorPtBrights
  5381.  
  5382.  move.w #1,SMALLIT
  5383.  
  5384.  movem.l a0/d0,-(a7)
  5385.  move.l $4.w,a6
  5386.  jsr _LVOSuperState(a6)
  5387.  move.l d0,SSTACK
  5388.  movem.l (a7)+,a0/d0
  5389.  
  5390.  move.l #FloorLine,LineToUse
  5391. * 1,2 = floor/roof
  5392.  clr.b usewater
  5393.  clr.b usebumps
  5394.  move.b GOURSEL,gourfloor    
  5395.  jsr itsafloordraw
  5396.  move.l a0,-(a7)
  5397.  move.l $4.w,a6
  5398.  move.l SSTACK,d0
  5399.  jsr _LVOUserState(a6)
  5400.  move.l (a7)+,a0
  5401.  bra polyloop
  5402. itsasetclip:
  5403.  bra polyloop
  5404. itsawall:
  5405.  clr.b seethru
  5406. ; move.l #stripbuffer,a1
  5407.  jsr itsawalldraw
  5408.  bra polyloop
  5409.  
  5410. jumpoutofloop:
  5411.  rts
  5412.  
  5413. LASTZONE: dc.l 0
  5414. COMPACTPTR: dc.l 0
  5415. BIGPTR: dc.l 0
  5416. WALLIDENT: dc.w 0
  5417. SMALLIT: dc.w 0
  5418. GOURSEL: dc.w 0
  5419. ThisRoomToDraw: dc.l 0,0
  5420. SplitHeight: dc.l 0
  5421.  
  5422.  include "ab3:source_4000/OrderZones"
  5423.  
  5424. ReadMouse:
  5425.  move.l #$dff000,a6
  5426.  clr.l d0
  5427.  clr.l d1
  5428.  move.w $a(a6),d0
  5429.  lsr.w #8,d0
  5430.  ext.l d0
  5431.  move.w d0,d3
  5432.  move.w oldmy,d2
  5433.  sub.w d2,d0
  5434.  
  5435.  cmp.w #127,d0
  5436.  blt nonegy
  5437.  move.w #255,d1
  5438.  sub.w d0,d1
  5439.  move.w d1,d0
  5440.  neg.w d0
  5441. nonegy:
  5442.  
  5443.  cmp.w #-127,d0
  5444.  bge nonegy2
  5445.  move.w #255,d1
  5446.  add.w d0,d1
  5447.  move.w d1,d0
  5448. nonegy2:
  5449.  
  5450.  add.b d0,d2
  5451.  add.w d0,oldy2
  5452.  move.w d2,oldmy
  5453.  move.w d2,d0
  5454.  
  5455.  move.w oldy2,d0
  5456.  move.w d0,ymouse
  5457.  
  5458.  clr.l d0
  5459.  clr.l d1
  5460.  move.w $a(a6),d0
  5461.  ext.w d0
  5462.  ext.l d0
  5463.  move.w d0,d3
  5464.  move.w oldmx,d2
  5465.  sub.w d2,d0
  5466.  
  5467.  cmp.w #127,d0
  5468.  blt nonegx
  5469.  move.w #255,d1
  5470.  sub.w d0,d1
  5471.  move.w d1,d0
  5472.  neg.w d0
  5473. nonegx:
  5474.  
  5475.  cmp.w #-127,d0
  5476.  bge nonegx2
  5477.  move.w #255,d1
  5478.  add.w d0,d1
  5479.  move.w d1,d0
  5480. nonegx2:
  5481.  
  5482.  add.b d0,d2
  5483.  move.w d0,d1
  5484.  move.w d2,oldmx
  5485.  
  5486.  move.w #$0,$dff034
  5487.  
  5488.  add.w d0,oldx2
  5489.  move.w oldx2,d0
  5490.  and.w #2047,d0
  5491.  move.w d0,oldx2
  5492.  
  5493.  asl.w #2,d0
  5494.  sub.w prevx,d0
  5495.  add.w d0,prevx
  5496.  asr.w #1,d0
  5497.  move.w d0,d1
  5498.  bge.s .okpos
  5499.  neg.w d1
  5500. .okpos:
  5501.  muls d1,d0
  5502.  add.w d0,angpos
  5503.  move.w #0,lrs
  5504.  rts
  5505.  
  5506. noturn:
  5507.  
  5508. ; got to move lr instead. 
  5509.  
  5510. ; d1 = speed moved l/r
  5511.  
  5512.  move.w d1,lrs
  5513.  
  5514.  rts
  5515.  
  5516. lrs: dc.w 0
  5517. prevx: dc.w 0
  5518.  
  5519. angpos: dc.w 0
  5520. mang: dc.w 0
  5521. oldymouse: dc.w 0
  5522. xmouse: dc.w 0
  5523. ymouse: dc.w 0
  5524. oldx2: dc.w 0
  5525. oldmx: dc.w 0
  5526. oldmy: dc.w 0
  5527. oldy2: dc.w 0
  5528.  
  5529. MAPON: dc.w $ffff
  5530.  
  5531. RotateLevelPts:
  5532.  
  5533.  tst.b MAPON
  5534.  beq ONLYTHELONELY
  5535.  
  5536.  move.w sinval,d6
  5537.  swap d6
  5538.  move.w cosval,d6
  5539.  move.l Points,a3
  5540.  move.l #Rotated,a1
  5541.  move.l #OnScreen,a2
  5542.  move.w xoff,d4
  5543.  move.w zoff,d5
  5544.  
  5545. ; move.w #$c40,$dff106
  5546. ; move.w #$f00,$dff180
  5547.  
  5548.  move.w NumLevPts,d7
  5549.  
  5550.  tst.b FULLSCR
  5551.  bne BIGALL
  5552.  
  5553. pointrotlop2:
  5554.  move.w (a3)+,d0
  5555.  sub.w d4,d0
  5556.  move.w d0,d2
  5557.  move.w (a3)+,d1
  5558.  sub.w d5,d1
  5559.  muls d6,d2
  5560.  swap d6
  5561.  move.w d1,d3
  5562.  muls d6,d3
  5563.  sub.l d3,d2
  5564.  add.l d2,d2
  5565.  swap d2
  5566.  ext.l d2
  5567.  asl.l #7,d2
  5568.  add.l xwobble,d2
  5569.  move.l d2,(a1)+
  5570.  
  5571.  muls d6,d0
  5572.  swap d6
  5573.  muls d6,d1
  5574.  add.l d0,d1
  5575.  asl.l #1,d1
  5576.  swap d1
  5577. ; ext.l d1
  5578. ; divs #3,d1
  5579.  move.l d1,(a1)+
  5580.  
  5581.  tst.w d1
  5582.  bgt.s ptnotbehind
  5583.  tst.w d2
  5584.  bgt.s onrightsomewhere
  5585.  move.w #0,d2
  5586.  bra putin
  5587. onrightsomewhere:
  5588.  move.w RIGHTX,d2
  5589.  bra putin
  5590. ptnotbehind:
  5591.  
  5592.  divs d1,d2
  5593.  add.w MIDDLEX,d2
  5594. putin:
  5595.  move.w d2,(a2)+
  5596.  
  5597.  dbra d7,pointrotlop2
  5598. outofpointrot:
  5599.   rts
  5600.  
  5601.  
  5602. BIGALL:
  5603.  
  5604. pointrotlop2B:
  5605.  move.w (a3)+,d0
  5606.  sub.w d4,d0
  5607.  move.w d0,d2
  5608.  move.w (a3)+,d1
  5609.  sub.w d5,d1
  5610.  muls d6,d2
  5611.  swap d6
  5612.  move.w d1,d3
  5613.  muls d6,d3
  5614.  sub.l d3,d2
  5615.  add.l d2,d2
  5616.  swap d2
  5617.  ext.l d2
  5618.  asl.l #7,d2
  5619.  add.l xwobble,d2
  5620.  move.l d2,(a1)+
  5621.  
  5622.  muls d6,d0
  5623.  swap d6
  5624.  muls d6,d1
  5625.  add.l d0,d1
  5626.  asl.l #2,d1
  5627.  swap d1
  5628.  ext.l d1
  5629.  divs #3,d1
  5630.  move.l d1,(a1)+
  5631.  
  5632.  tst.w d1
  5633.  bgt.s ptnotbehindB
  5634.  tst.w d2
  5635.  bgt.s onrightsomewhereB
  5636.  move.w #0,d2
  5637.  bra putinB
  5638. onrightsomewhereB:
  5639.  move.w RIGHTX,d2
  5640.  bra putinB
  5641. ptnotbehindB:
  5642.  
  5643.  divs d1,d2
  5644.  add.w MIDDLEX,d2
  5645. putinB:
  5646.  move.w d2,(a2)+
  5647.  
  5648.  dbra d7,pointrotlop2B
  5649.   rts
  5650.  
  5651.  
  5652. ONLYTHELONELY:
  5653.  
  5654.  move.w sinval,d6
  5655.  swap d6
  5656.  move.w cosval,d6
  5657.  
  5658.  move.l PointsToRotatePtr,a0
  5659.  move.l Points,a3
  5660.  move.l #Rotated,a1
  5661.  move.l #OnScreen,a2
  5662.  move.w xoff,d4
  5663.  move.w zoff,d5
  5664.  
  5665. ; move.w #$c40,$dff106
  5666. ; move.w #$f00,$dff180
  5667.  
  5668.  tst.b FULLSCR
  5669.  bne BIGLONELY
  5670.  
  5671. pointrotlop:
  5672.  move.w (a0)+,d7
  5673.  blt outofpointrot
  5674.  
  5675.  move.w (a3,d7*4),d0
  5676.  sub.w d4,d0
  5677.  move.w d0,d2
  5678.  move.w 2(a3,d7*4),d1
  5679.  sub.w d5,d1
  5680.  muls d6,d2
  5681.  swap d6
  5682.  move.w d1,d3
  5683.  muls d6,d3
  5684.  sub.l d3,d2
  5685.  add.l d2,d2
  5686.  swap d2
  5687.  ext.l d2
  5688.  asl.l #7,d2
  5689.  add.l xwobble,d2
  5690.  move.l d2,(a1,d7*8)
  5691.  
  5692.  muls d6,d0
  5693.  swap d6
  5694.  muls d6,d1
  5695.  add.l d0,d1
  5696.  asl.l #1,d1
  5697.  swap d1
  5698. ; ext.l d1
  5699. ; divs #3,d1
  5700.  move.l d1,4(a1,d7*8)
  5701.  
  5702.  tst.w d1
  5703.  bgt.s .ptnotbehind
  5704.  tst.w d2
  5705.  bgt.s .onrightsomewhere
  5706.  move.w #0,d2
  5707.  bra .putin
  5708. .onrightsomewhere:
  5709.  move.w RIGHTX,d2
  5710.  bra .putin
  5711. .ptnotbehind:
  5712.  
  5713.  divs d1,d2
  5714.  add.w MIDDLEX,d2
  5715. .putin:
  5716.  move.w d2,(a2,d7*2)
  5717.  
  5718.  bra pointrotlop
  5719.  
  5720. ; move.w #$c40,$dff106
  5721. ; move.w #$ff0,$dff180
  5722.  
  5723.  rts
  5724.  
  5725. BIGLONELY:
  5726.  
  5727. .pointrotlop:
  5728.  move.w (a0)+,d7
  5729.  blt.s .outofpointrot
  5730.  
  5731.  move.w (a3,d7*4),d0
  5732.  sub.w d4,d0
  5733.  move.w d0,d2
  5734.  move.w 2(a3,d7*4),d1
  5735.  sub.w d5,d1
  5736.  muls d6,d2
  5737.  swap d6
  5738.  move.w d1,d3
  5739.  muls d6,d3
  5740.  sub.l d3,d2
  5741.  add.l d2,d2
  5742.  swap d2
  5743.  ext.l d2
  5744.  asl.l #7,d2
  5745.  add.l xwobble,d2
  5746.  move.l d2,(a1,d7*8)
  5747.  
  5748.  muls d6,d0
  5749.  swap d6
  5750.  muls d6,d1
  5751.  add.l d0,d1
  5752.  asl.l #2,d1
  5753.  swap d1
  5754.  ext.l d1
  5755.  divs #3,d1
  5756.  move.l d1,4(a1,d7*8)
  5757.  
  5758.  tst.w d1
  5759.  bgt.s .ptnotbehind
  5760.  tst.w d2
  5761.  bgt.s .onrightsomewhere
  5762.  move.w #0,d2
  5763.  bra .putin
  5764. .onrightsomewhere:
  5765.  move.w RIGHTX,d2
  5766.  bra .putin
  5767. .ptnotbehind:
  5768.  
  5769.  divs d1,d2
  5770.  add.w MIDDLEX,d2
  5771. .putin:
  5772.  move.w d2,(a2,d7*2)
  5773.  
  5774.  bra .pointrotlop
  5775.  
  5776. .outofpointrot:
  5777. ; move.w #$c40,$dff106
  5778. ; move.w #$ff0,$dff180
  5779.  
  5780.  rts
  5781.  
  5782.  
  5783. PLR1_ObjDists
  5784.  ds.w 250
  5785. PLR2_ObjDists
  5786.  ds.w 250
  5787.  
  5788. CalcPLR1InLine:
  5789.  
  5790.  move.w PLR1_sinval,d5
  5791.  move.w PLR1_cosval,d6
  5792.  move.l ObjectData,a4
  5793.  move.l ObjectPoints,a0
  5794.  move.w NumObjectPoints,d7
  5795.  move.l #PLR1_ObsInLine,a2
  5796.  move.l #PLR1_ObjDists,a3
  5797.  
  5798. .objpointrotlop:
  5799.  
  5800.  cmp.b #3,16(a4)
  5801.  beq.s .itaux
  5802.  
  5803.  move.w (a0),d0
  5804.  sub.w PLR1_xoff,d0
  5805.  move.w 4(a0),d1
  5806.  addq #8,a0
  5807.  
  5808.  tst.w 12(a4)
  5809.  blt .noworkout
  5810.  
  5811.  moveq #0,d2
  5812.  move.b 16(a4),d2
  5813.  ;move.l #ColBoxTable,a6
  5814.  ;lea (a6,d2.w*8),a6
  5815.  
  5816.  sub.w PLR1_zoff,d1
  5817.  move.w d0,d2
  5818.  muls d6,d2
  5819.  move.w d1,d3
  5820.  muls d5,d3
  5821.  sub.l d3,d2
  5822.  add.l d2,d2
  5823.  
  5824.  bgt.s .okh
  5825.  neg.l d2
  5826. .okh:
  5827.  swap d2
  5828.  
  5829.  muls d5,d0
  5830.  muls d6,d1
  5831.  add.l d0,d1
  5832.  asl.l #2,d1
  5833.  swap d1
  5834.  moveq #0,d3
  5835.  
  5836.  tst.w d1
  5837.  ble.s .notinline
  5838.  asr.w #1,d2
  5839.  cmp.w #80,d2
  5840.  bgt.s .notinline
  5841.  
  5842.  st d3
  5843. .notinline
  5844.  move.b d3,(a2)+
  5845.  
  5846.  move.w d1,(a3)+
  5847.  
  5848.  add.w #64,a4
  5849.  dbra d7,.objpointrotlop
  5850.  
  5851.  rts
  5852.  
  5853. .itaux:
  5854.  add.w #64,a4
  5855.  bra .objpointrotlop
  5856.  
  5857.  
  5858. .noworkout:
  5859.  move.b #0,(a2)+
  5860.  move.w #0,(a3)+
  5861.  add.w #64,a4
  5862.  dbra d7,.objpointrotlop
  5863.  rts
  5864.  
  5865.  
  5866. CalcPLR2InLine:
  5867.  
  5868.  move.w PLR2_sinval,d5
  5869.  move.w PLR2_cosval,d6
  5870.  move.l ObjectData,a4
  5871.  move.l ObjectPoints,a0
  5872.  move.w NumObjectPoints,d7
  5873.  move.l #PLR2_ObsInLine,a2
  5874.  move.l #PLR2_ObjDists,a3
  5875.  
  5876. .objpointrotlop:
  5877.  
  5878.  move.w (a0),d0
  5879.  sub.w PLR2_xoff,d0
  5880.  move.w 4(a0),d1
  5881.  addq #8,a0
  5882.  
  5883.  tst.w 12(a4)
  5884.  blt .noworkout
  5885.  
  5886.  moveq #0,d2
  5887.  move.b 16(a4),d2
  5888.  move.l #ColBoxTable,a6
  5889.  lea (a6,d2.w*8),a6
  5890.  
  5891.  sub.w PLR2_zoff,d1
  5892.  move.w d0,d2
  5893.  muls d6,d2
  5894.  move.w d1,d3
  5895.  muls d5,d3
  5896.  sub.l d3,d2
  5897.  add.l d2,d2
  5898.  
  5899.  bgt.s .okh
  5900.  neg.l d2
  5901. .okh:
  5902.  swap d2
  5903.  
  5904.  muls d5,d0
  5905.  muls d6,d1
  5906.  add.l d0,d1
  5907.  asl.l #2,d1
  5908.  swap d1
  5909.  moveq #0,d3
  5910.  
  5911.  tst.w d1
  5912.  ble.s .notinline
  5913.  asr.w #1,d2
  5914.  cmp.w (a6),d2
  5915.  bgt.s .notinline
  5916.  
  5917.  st d3
  5918. .notinline
  5919.  move.b d3,(a2)+
  5920.  
  5921.  move.w d1,(a3)+
  5922.  
  5923.  add.w #64,a4
  5924.  dbra d7,.objpointrotlop
  5925.  
  5926.  rts
  5927.  
  5928. .noworkout:
  5929.  move.w #0,(a3)+
  5930.  move.b #0,(a2)+
  5931.  add.w #64,a4
  5932.  dbra d7,.objpointrotlop
  5933.  rts
  5934.  
  5935.  
  5936. RotateObjectPts:
  5937.  
  5938.  move.w sinval,d5
  5939.  move.w cosval,d6
  5940.  
  5941.  move.l ObjectData,a4
  5942.  move.l ObjectPoints,a0
  5943.  move.w NumObjectPoints,d7
  5944.  move.l #ObjRotated,a1
  5945.  
  5946.  tst.b FULLSCR
  5947.  bne BIGOBJPTS
  5948.  
  5949.  
  5950. .objpointrotlop:
  5951.  
  5952.  cmp.b #3,16(a4)
  5953.  beq.s .itaux
  5954.  
  5955.  move.w (a0),d0
  5956.  sub.w xoff,d0
  5957.  move.w 4(a0),d1
  5958.  addq #8,a0
  5959.  
  5960.  tst.w 12(a4)
  5961.  blt .noworkout
  5962.  
  5963.  sub.w zoff,d1
  5964.  
  5965.  move.w d0,d2
  5966.  muls d6,d2
  5967.  move.w d1,d3
  5968.  muls d5,d3
  5969.  sub.l d3,d2
  5970.  
  5971.  
  5972.  add.l d2,d2
  5973.  swap d2
  5974.  move.w d2,(a1)+
  5975.  
  5976.  muls d5,d0
  5977.  muls d6,d1
  5978.  add.l d0,d1
  5979.  asl.l #1,d1
  5980.  swap d1
  5981. ; ext.l d1
  5982. ; divs #3,d1
  5983.  moveq #0,d3
  5984.  
  5985.  move.w d1,(a1)+
  5986.  ext.l d2
  5987.  asl.l #7,d2
  5988.  add.l xwobble,d2
  5989.  move.l d2,(a1)+
  5990.  
  5991.  dbra d7,.objpointrotlop
  5992.  
  5993.  rts
  5994.  
  5995. .itaux:
  5996.  add.w #64,a4
  5997.  bra .objpointrotlop
  5998.  
  5999. .noworkout:
  6000.   move.l #0,(a1)+
  6001.   move.l #0,(a1)+
  6002.   add.w #64,a4
  6003.   dbra d7,.objpointrotlop
  6004.   rts
  6005.   
  6006. BIGOBJPTS:
  6007.  
  6008. .objpointrotlop:
  6009.  
  6010.  cmp.b #3,16(a4)
  6011.  beq.s .itaux
  6012.  
  6013.  move.w (a0),d0
  6014.  sub.w xoff,d0
  6015.  move.w 4(a0),d1
  6016.  addq #8,a0
  6017.  
  6018.  tst.w 12(a4)
  6019.  blt .noworkout
  6020.  
  6021.  sub.w zoff,d1
  6022.  move.w d0,d2
  6023.  muls d6,d2
  6024.  move.w d1,d3
  6025.  muls d5,d3
  6026.  sub.l d3,d2
  6027.  
  6028.  
  6029.  add.l d2,d2
  6030.  swap d2
  6031.  move.w d2,(a1)+
  6032.  
  6033.  muls d5,d0
  6034.  muls d6,d1
  6035.  add.l d0,d1
  6036.  asl.l #2,d1
  6037.  swap d1
  6038.  ext.l d1
  6039.  divs #3,d1
  6040.  moveq #0,d3
  6041.  
  6042.  move.w d1,(a1)+
  6043.  ext.l d2
  6044.  asl.l #7,d2
  6045.  add.l xwobble,d2
  6046.  move.l d2,(a1)+
  6047.  sub.l xwobble,d2
  6048.  
  6049.  add.w #64,a4
  6050.  dbra d7,.objpointrotlop
  6051.  
  6052.  rts
  6053.  
  6054. .itaux:
  6055.  add.w #64,a4
  6056.  bra .objpointrotlop
  6057.  
  6058. .noworkout:
  6059.   move.l #0,(a1)+
  6060.   move.l #0,(a1)+
  6061.   add.w #64,a4
  6062.   dbra d7,.objpointrotlop
  6063.   rts
  6064.  
  6065. LightDraw:
  6066.  
  6067.  move.w (a0)+,d0
  6068.  move.w (a0)+,d1
  6069.  move.l #Rotated,a1
  6070.  move.w 6(a1,d0.w*8),d2
  6071.  ble.s oneendbehind
  6072.  move.w 6(a1,d1.w*8),d3
  6073.  bgt.s bothendsinfront
  6074.  
  6075. oneendbehind:
  6076.  rts
  6077. bothendsinfront:
  6078.  
  6079.  move.l #OnScreen,a2
  6080.  move.w (a2,d0.w*2),d0
  6081.  bge.s okleftend
  6082.  moveq #0,d0
  6083. okleftend:
  6084.  move.w (a2,d1.w*2),d1
  6085.  bgt.s somevis
  6086.  rts
  6087. somevis:
  6088.  cmp.w RIGHTX,d0
  6089.  blt.s somevis2
  6090.  rts
  6091. somevis2:
  6092.  cmp.w RIGHTX,d1
  6093.  blt.s okrightend
  6094.  move.w RIGHTX,d1
  6095.  subq #1,d1
  6096. okrightend:
  6097.  
  6098.  sub.w d0,d1
  6099.  blt.s wrongbloodywayround
  6100.  move.l #brightentab,a4
  6101.  move.l #objintocop,a1
  6102.  lea (a1,d0.w*2),a1
  6103.  
  6104.  move.l frompt,a3
  6105.  move.w #104*4,d6
  6106.  move.w #79,d2
  6107. lacross:
  6108.  move.w d2,d3
  6109.  move.l a3,a2
  6110.  adda.w (a1)+,a2
  6111. ldown:
  6112.  add.w d6,a2
  6113.  move.w (a2),d7
  6114.  move.w (a4,d7.w*2),(a2)
  6115.  dbra d3,ldown
  6116.  dbra d1,lacross
  6117.  
  6118. wrongbloodywayround:
  6119.  
  6120.  rts
  6121.  
  6122. FaceToPlace: dc.w 0
  6123.  
  6124. Cheese:
  6125.  dc.w 4,15
  6126.  
  6127. FacesList:
  6128.  dc.w 0,4*4
  6129.  dc.w 1,2*4
  6130.  dc.w 0,2*4
  6131.  dc.w 2,2*4
  6132.  dc.w 0,2*4
  6133.  dc.w 1,3*4
  6134.  dc.w 0,2*4
  6135.  dc.w 2,3*4
  6136.  dc.w 0,5*4
  6137.  dc.w 1,2*4
  6138.  dc.w 0,2*4
  6139.  dc.w 2,2*4
  6140.  dc.w 0,2*4
  6141.  dc.w 1,2*4
  6142.  dc.w 0,2*4
  6143.  dc.w 2,3*4
  6144.  dc.w 0,1*4
  6145.  dc.w 1,3*4
  6146.  dc.w 0,1*4
  6147.  dc.w 2,3*4
  6148.  dc.w 0,1*4
  6149.  
  6150. EndOfFacesList:
  6151.  
  6152. FacesPtr:
  6153.  dc.l FacesList
  6154. FacesCounter:
  6155.  dc.w 0
  6156. Expression:
  6157.  dc.w 0
  6158.  
  6159. PlaceFace:
  6160.  
  6161.  move.w FacesCounter,d0
  6162.  subq #1,d0
  6163.  bgt.s NoNewFace
  6164.  
  6165.  move.l FacesPtr,a0
  6166.  
  6167.  move.w 2(a0),d0
  6168.  move.w (a0),Expression
  6169.  addq #4,a0
  6170.  cmp.l #EndOfFacesList,a0
  6171.  blt.s NotFirstFace
  6172.  
  6173.  move.l #FacesList,a0
  6174.  
  6175. NotFirstFace
  6176.  move.l a0,FacesPtr
  6177.  
  6178. NoNewFace:
  6179.  
  6180.  move.w d0,FacesCounter
  6181.  
  6182.  Move.w FaceToPlace,d0
  6183.  muls #5,d0
  6184.  add.w Expression,d0
  6185.  move.l #FacePlace+10,a0
  6186.  move.l #Faces,a1
  6187.  muls #(4*32*5),d0
  6188.  adda.w d0,a1
  6189.  move.w #4,d0
  6190.  move.w #24,d1
  6191.  
  6192.  move.w #4,d3
  6193. bitplaneloop:
  6194.  move.w #31,d2
  6195. PlaceFaceToPlaceInFacePlaceLoop:
  6196.  move.l (a1),(a0)
  6197.  adda.w d0,a1
  6198.  adda.w d1,a0
  6199.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  6200.  dbra d3,bitplaneloop
  6201.  
  6202.  rts
  6203.  
  6204. Energy:
  6205.  dc.w 191
  6206. OldEnergy:
  6207.  dc.w 191
  6208. Ammo: dc.w 63
  6209. OldAmmo: dc.w 63
  6210.  
  6211. FullEnergy:
  6212.  move.w #127,Energy
  6213.  move.w #127,OldEnergy
  6214.  move.l #health,a0
  6215.  move.l #borders,a1
  6216.  add.l #25*8*2+6,a1
  6217.  lea 2592(a1),a2
  6218.  move.w #127,d0
  6219. PutInFull:
  6220.  move.b (a0)+,(a1)
  6221.  move.b (a0)+,8(a1)
  6222.  add.w #16,a1
  6223.  move.b (a0)+,(a2)
  6224.  move.b (a0)+,8(a2)
  6225.  add.w #16,a2
  6226.  dbra d0,PutInFull
  6227.  
  6228.  rts
  6229.  
  6230. ;EnergyBar:
  6231.  
  6232.  move.w Energy,d0
  6233.  bgt.s .noeneg
  6234.  move.w #0,d0
  6235. .noeneg:
  6236.  move.w d0,Energy
  6237.  
  6238.  cmp.w OldEnergy,d0
  6239.  bne.s gottochange
  6240.  
  6241. NoChange
  6242.  rts
  6243.  
  6244. gottochange:
  6245.   
  6246.  blt LessEnergy
  6247.  cmp.w #127,Energy
  6248.  blt.s NotMax
  6249.  move.w #127,Energy
  6250. NotMax:
  6251.  
  6252.  move.w Energy,d0
  6253.  move.w OldEnergy,d2
  6254.  sub.w d0,d2
  6255.  beq.s NoChange    
  6256.  neg.w d2
  6257.  
  6258.  move.w #127,d3
  6259.  sub.w d0,d3
  6260.  
  6261.  move.l #health,a0
  6262.  lea (a0,d3.w*4),a0
  6263.  move.l #borders+25*16+6,a1
  6264.  lsl.w #4,d3
  6265.  add.w d3,a1
  6266.  lea 2592(a1),a2
  6267.  
  6268. EnergyRise:
  6269.  move.b (a0)+,(a1)
  6270.  move.b (a0)+,8(a1)
  6271.  add.w #16,a1
  6272.  move.b (a0)+,(a2)
  6273.  move.b (a0)+,8(a2)
  6274.  add.w #16,a2
  6275.  subq #1,d2
  6276.  bgt.s EnergyRise
  6277.  
  6278.  move.w Energy,OldEnergy
  6279.  
  6280.  rts 
  6281.  
  6282. LessEnergy: 
  6283.  move.w OldEnergy,d2
  6284.  sub.w d0,d2
  6285.  
  6286.  move.w #127,d3
  6287.  sub.w OldEnergy,d3
  6288.  
  6289.  move.l #borders+25*16+6,a1
  6290.  asl.w #4,d3
  6291.  add.w d3,a1
  6292.  lea 2592(a1),a2
  6293.  
  6294. EnergyDrain:
  6295.  move.b #0,(a1)
  6296.  move.b #0,8(a1)
  6297.  move.b #0,(a2)
  6298.  move.b #0,8(a2)
  6299.  add.w #16,a1
  6300.  add.w #16,a2
  6301.  subq #1,d2
  6302.  bgt.s EnergyDrain
  6303.  
  6304.  move.w Energy,OldEnergy
  6305.  
  6306.  rts 
  6307.  
  6308. firstdigit: dc.b 0
  6309. secdigit: dc.b 0
  6310. thirddigit: dc.b 0
  6311.  
  6312.  even
  6313.  
  6314. AmmoBar:
  6315.  
  6316. * Do guns first.
  6317.  
  6318.  move.l #borderchars,a4
  6319.  move.l #PLAYERONEGUNS,a5
  6320.  move.w #9,d2
  6321.  moveq #0,d0
  6322. putingunnums:
  6323.  move.w #4,d1
  6324.  move.l a4,a0
  6325.  cmp.b p1_gunselected,d0
  6326.  bne.s .notsel
  6327.  add.l #5*10*8*2,a0
  6328.  addq #2,a5
  6329.  bra.s .donesel
  6330. .notsel:
  6331.  tst.w (a5)+
  6332.  beq.s .donesel
  6333.  add.l #5*10*8,a0
  6334. .donesel:
  6335.  move.l SCRNDRAWPT,a1
  6336.  add.w d0,a1
  6337.  add.l #3+(240*40),a1
  6338.  bsr DRAWDIGIT
  6339.  addq #1,d0
  6340.  dbra d2,putingunnums
  6341.  
  6342.  move.w Ammo,d0
  6343.  ext.l d0
  6344.  divs #10,d0
  6345.  swap d0
  6346.  move.b d0,thirddigit
  6347.  swap d0
  6348.  ext.l d0
  6349.  divs #10,d0
  6350.  move.b d0,firstdigit
  6351.  swap d0
  6352.  move.b d0,secdigit
  6353.  
  6354.  move.l #borderchars+15*8*10,a0
  6355.  cmp.w #10,Ammo
  6356.  blt.s .notsmallamo
  6357.  add.l #7*8*10,a0
  6358. .notsmallamo:
  6359.  
  6360.  move.l SCRNDRAWPT,a1
  6361.  add.l #20+238*40,a1
  6362.  move.b firstdigit,d0
  6363.  move.w #6,d1
  6364.  bsr DRAWDIGIT
  6365.  
  6366.  move.l SCRNDRAWPT,a1
  6367.  add.l #21+238*40,a1
  6368.  move.b secdigit,d0
  6369.  move.w #6,d1
  6370.  bsr DRAWDIGIT
  6371.  
  6372.  move.l SCRNDRAWPT,a1
  6373.  add.l #22+238*40,a1
  6374.  move.b thirddigit,d0
  6375.  move.w #6,d1
  6376.  bsr DRAWDIGIT
  6377.  
  6378.  rts
  6379.  
  6380. EnergyBar:
  6381.  move.w Energy,d0
  6382.  bge.s .okpo
  6383.  moveq #0,d0 
  6384. .okpo:
  6385.  
  6386.  ext.l d0
  6387.  divs #10,d0
  6388.  swap d0
  6389.  move.b d0,thirddigit
  6390.  swap d0
  6391.  ext.l d0
  6392.  divs #10,d0
  6393.  move.b d0,firstdigit
  6394.  swap d0
  6395.  move.b d0,secdigit
  6396.  
  6397.  move.l #borderchars+15*8*10,a0
  6398.  cmp.w #10,Energy
  6399.  blt.s .notsmallamo
  6400.  add.l #7*8*10,a0
  6401. .notsmallamo:
  6402.  
  6403.  move.l SCRNDRAWPT,a1
  6404.  add.l #34+238*40,a1
  6405.  move.b firstdigit,d0
  6406.  move.w #6,d1
  6407.  bsr DRAWDIGIT
  6408.  
  6409.  move.l SCRNDRAWPT,a1
  6410.  add.l #35+238*40,a1
  6411.  move.b secdigit,d0
  6412.  move.w #6,d1
  6413.  bsr DRAWDIGIT
  6414.  
  6415.  move.l SCRNDRAWPT,a1
  6416.  add.l #36+238*40,a1
  6417.  move.b thirddigit,d0
  6418.  move.w #6,d1
  6419.  bsr DRAWDIGIT
  6420.  
  6421.  move.l SCRNSHOWPT,a1
  6422.  add.l #34+238*40,a1
  6423.  move.b firstdigit,d0
  6424.  move.w #6,d1
  6425.  bsr DRAWDIGIT
  6426.  
  6427.  move.l SCRNSHOWPT,a1
  6428.  add.l #35+238*40,a1
  6429.  move.b secdigit,d0
  6430.  move.w #6,d1
  6431.  bsr DRAWDIGIT
  6432.  
  6433.  move.l SCRNSHOWPT,a1
  6434.  add.l #36+238*40,a1
  6435.  move.b thirddigit,d0
  6436.  move.w #6,d1
  6437.  bsr DRAWDIGIT
  6438.  
  6439.  
  6440.  rts
  6441.  
  6442.  
  6443. DRAWDIGIT:
  6444.  ext.w d0
  6445.  lea (a0,d0.w),a2
  6446. charlines:
  6447.  lea 30720(a1),a3 
  6448.  move.b (a2),(a1)
  6449.  move.b 10(a2),10240(a1)
  6450.  move.b 20(a2),20480(a1)
  6451.  move.b 30(a2),(a3)
  6452.  move.b 40(a2),10240(a3)
  6453.  move.b 50(a2),20480(a3)
  6454.  lea 30720(a3),a3
  6455.  move.b 60(a2),(a3)
  6456.  move.b 70(a2),10240(a3)
  6457.  
  6458.  add.w #10*8,a2
  6459.  add.w #40,a1
  6460.  dbra d1,charlines
  6461.  
  6462.  rts
  6463.  
  6464. borderchars: incbin "ab3:includes/bordercharsRAW"
  6465.  
  6466. NARRATOR:
  6467.  
  6468. ; sub.w #1,NARRTIME
  6469. ; bge .NOCHARYET
  6470. ; move.w #3,NARRTIME
  6471.  
  6472.  move.l #SCROLLSCRN,d1
  6473.  move.w d1,scroll
  6474.  swap d1
  6475.  move.w d1,scrolh
  6476.  
  6477.  move.w SCROLLTIMER,d0
  6478.  subq #1,d0
  6479.  move.w d0,SCROLLTIMER
  6480.  cmp.w #40,d0
  6481.  bge .NOCHARYET
  6482.  tst.w d0
  6483.  bge.s .okcha
  6484.  
  6485.  move.w #150,SCROLLTIMER
  6486.  bra .NOCHARYET
  6487.  
  6488. .okcha:
  6489.  
  6490.  move.l #SCROLLSCRN,a0
  6491.  add.w SCROLLXPOS,a0
  6492.  
  6493.  moveq #1,d7
  6494. .doachar: 
  6495.  
  6496.  move.l SCROLLPOINTER,a1
  6497.  moveq #0,d1
  6498.  move.b (a1)+,d1    ; character
  6499.  move.l a1,d2
  6500.  cmp.l ENDSCROLL,d2
  6501.  blt.s .notrestartscroll
  6502.  move.l #BLANKSCROLL,a1
  6503.  move.l #BLANKSCROLL+80,ENDSCROLL
  6504. .notrestartscroll
  6505.  move.l a1,SCROLLPOINTER
  6506.  
  6507.  move.l #SCROLLCHARS,a1
  6508.  asl.w #3,d1
  6509.  add.w d1,a1
  6510.  
  6511.  move.b (a1)+,(a0)
  6512.  move.b (a1)+,80(a0)
  6513.  move.b (a1)+,80*2(a0)
  6514.  move.b (a1)+,80*3(a0)
  6515.  move.b (a1)+,80*4(a0)
  6516.  move.b (a1)+,80*5(a0)
  6517.  move.b (a1)+,80*6(a0)
  6518.  move.b (a1)+,80*7(a0)
  6519.  
  6520.  addq #1,a0
  6521.  dbra d7,.doachar
  6522.  
  6523.  move.w SCROLLXPOS,d0
  6524.  addq #2,d0
  6525.  move.w d0,SCROLLXPOS
  6526.  cmp.w #80,d0
  6527.  blt .NOCHARYET
  6528.  move.w #0,SCROLLXPOS
  6529.  
  6530. .NOCHARYET:
  6531.  rts
  6532.  
  6533. ; cmp.w OldAmmo,d0
  6534. ; bne.s .gottochange
  6535.  
  6536. NARRTIME: dc.w 5
  6537.  
  6538. SCROLLCHARS: incbin "ab3:includes/scrollfont"
  6539.  
  6540. .NoChange
  6541.  rts
  6542.  
  6543. .gottochange:
  6544.   
  6545.  blt LessAmmo
  6546.  cmp.w #63,Ammo
  6547.  blt.s .NotMax
  6548.  move.w #63,Ammo
  6549. .NotMax:
  6550.  
  6551.  move.w Ammo,d0
  6552.  move.w OldAmmo,d2
  6553.  sub.w d0,d2
  6554.  beq.s .NoChange
  6555.  neg.w d2
  6556.  
  6557.  move.w #63,d3
  6558.  sub.w d0,d3
  6559.  
  6560.  move.l #Ammunition,a0
  6561.  lea (a0,d3.w*8),a0
  6562.  move.l #borders+5184+25*16+1,a1
  6563.  lsl.w #5,d3
  6564.  add.w d3,a1
  6565.  lea 2592(a1),a2
  6566.  
  6567. AmmoRise:
  6568.  move.b (a0)+,(a1)
  6569.  move.b (a0)+,8(a1)
  6570.  add.w #16,a1
  6571.  move.b (a0)+,(a2)
  6572.  move.b (a0)+,8(a2)
  6573.  add.w #16,a2
  6574.  move.b (a0)+,(a1)
  6575.  move.b (a0)+,8(a1)
  6576.  add.w #16,a1
  6577.  move.b (a0)+,(a2)
  6578.  move.b (a0)+,8(a2)
  6579.  add.w #16,a2
  6580.  subq #1,d2
  6581.  bgt.s AmmoRise
  6582.  
  6583.  move.w Ammo,OldAmmo
  6584.  
  6585.  rts 
  6586.  
  6587.  
  6588. LessAmmo: 
  6589.  move.w OldAmmo,d2
  6590.  sub.w d0,d2
  6591.  
  6592.  move.w #63,d3
  6593.  sub.w OldAmmo,d3
  6594.  
  6595.  move.l #borders++5184+25*16+1,a1
  6596.  asl.w #5,d3
  6597.  add.w d3,a1
  6598.  lea 2592(a1),a2
  6599.  
  6600. AmmoDrain:
  6601.  move.b #0,(a1)
  6602.  move.b #0,8(a1)
  6603.  move.b #0,(a2)
  6604.  move.b #0,8(a2)
  6605.  add.w #16,a1
  6606.  add.w #16,a2
  6607.  move.b #0,(a1)
  6608.  move.b #0,8(a1)
  6609.  move.b #0,(a2)
  6610.  move.b #0,8(a2)
  6611.  add.w #16,a1
  6612.  add.w #16,a2
  6613.  subq #1,d2
  6614.  bgt.s AmmoDrain
  6615.  
  6616.  move.w Ammo,OldAmmo
  6617.  
  6618.  rts 
  6619.  
  6620. nulop:
  6621.  move.w #$0010,$dff000+intreq
  6622.  rte
  6623.  
  6624. doanything: dc.w 0
  6625.  
  6626. end:
  6627. ;     _break #0
  6628.  
  6629.  clr.b dosounds
  6630.  clr.b doanything
  6631.  
  6632.  move.w PLAYERONEHEALTH,Energy
  6633.  cmp.b #'s',mors
  6634.  bne.s .notsl
  6635.  move.w PLR2_energy,Energy
  6636. .notsl:
  6637.  
  6638.  
  6639.  move.l drawpt,d0
  6640.  move.l olddrawpt,drawpt
  6641.  move.l d0,olddrawpt
  6642.  move.l d0,$dff084
  6643.  
  6644.  
  6645.  cmp.b #'b',Prefsfile+3
  6646.  bne.s .noback
  6647.  jsr mt_end
  6648. .noback
  6649.  tst.w Energy
  6650.  bgt.s wevewon
  6651.  move.w #0,Energy
  6652.  bsr EnergyBar
  6653.  
  6654.  move.l #gameover,mt_data
  6655.  st UseAllChannels
  6656.  clr.b reachedend
  6657.  jsr mt_init
  6658. playgameover:
  6659.  move.l #$dff000,a6
  6660. waitfortop2:
  6661.  
  6662.     
  6663.  btst.b #0,intreqrl(a6)
  6664.  beq waitfortop2
  6665.  move.w #$1,intreq(a6)
  6666.  
  6667.     
  6668.  jsr mt_music
  6669.  
  6670.  
  6671.     
  6672.  tst.b reachedend
  6673.  beq.s playgameover
  6674.  
  6675.  bra wevelost
  6676.  
  6677.  
  6678. wevewon:
  6679.  bsr EnergyBar
  6680.  
  6681.  cmp.b #'n',mors
  6682.  bne.s .nonextlev
  6683.  add.w #1,MAXLEVEL
  6684.  st FINISHEDLEVEL
  6685. .nonextlev:
  6686.  
  6687.  move.l #welldone,mt_data
  6688.  st UseAllChannels
  6689.  clr.b reachedend
  6690.  jsr mt_init
  6691. playwelldone:
  6692.  move.l #$dff000,a6
  6693. waitfortop3:
  6694.  btst.b #0,intreqrl(a6)
  6695.  beq waitfortop3
  6696.  move.w #$1,intreq(a6)
  6697.  
  6698.  jsr mt_music
  6699.  
  6700.  tst.b reachedend
  6701.  beq.s playwelldone
  6702.  
  6703. wevelost:
  6704.  
  6705.  PROTICHECK a0
  6706.  
  6707.  jmp closeeverything 
  6708.  
  6709. endnomusic
  6710.  clr.b doanything
  6711.  cmp.b #'b',Prefsfile+3
  6712.  bne.s .noback
  6713.  jsr mt_end
  6714. .noback
  6715. *******************************
  6716. ; cmp.b #'n',mors
  6717. ; bne.s .nonextlev
  6718. ; cmp.w #15,MAXLEVEL
  6719. ; bge.s .nonextlev
  6720. ; add.w #1,MAXLEVEL
  6721. ; st FINISHEDLEVEL
  6722. ;.nonextlev:
  6723. ******************************
  6724.  
  6725.  jmp closeeverything
  6726.  
  6727. do32:
  6728.  move.w #31,d7
  6729.  move.w #$180,d1
  6730. across:
  6731.  move.w d1,(a1)+
  6732.  move.w d1,(a3)+
  6733.  move.w #0,(a1)+ 
  6734.  move.w #0,(a3)+
  6735.  add.w #2,d1
  6736.  dbra d7,across
  6737.  rts
  6738.  
  6739. string:
  6740.     dc.b    'credits',0
  6741.  
  6742. ENDGAMESCROLL:
  6743.  
  6744.     move.l    4.w,a6
  6745.     move.l    #string,d1
  6746.     moveq    #0,d2
  6747.     moveq    #0,d3
  6748.     jsr    _LVOExecute(a6)
  6749.  
  6750. ; include "endscroll.s"
  6751.  
  6752. ***********************************
  6753.  include "ab3:source_4000/CD32JOY"
  6754.  
  6755.  
  6756.  
  6757. *************************************
  6758. * Set left and right clip values
  6759. *************************************
  6760.  
  6761.  
  6762.  
  6763. NEWsetlclip:
  6764.  move.l #OnScreen,a1
  6765.  move.l #Rotated,a2
  6766.  move.l CONNECT_TABLE,a3
  6767.  
  6768.  move.w (a0),d0
  6769.  bge.s .notignoreleft
  6770.  
  6771. ; move.l #0,(a6)
  6772.  
  6773.  bra .leftnotoktoclip
  6774. .notignoreleft:
  6775.  
  6776.  move.w 6(a2,d0*8),d3    ; left z val
  6777.  bgt.s .leftclipinfront
  6778.  addq #2,a0
  6779.  rts
  6780.  
  6781.  tst.w 6(a2,d0*8)
  6782.  bgt.s .leftnotoktoclip
  6783. .ignoreboth:
  6784. ; move.l #0,(a6)
  6785. ; move.l #96*65536,4(a6)
  6786.  move.w #0,leftclip
  6787.  move.w RIGHTX,rightclip
  6788.  addq #8,a6
  6789.  addq #2,a0
  6790.  rts
  6791.  
  6792. .leftclipinfront:
  6793.  move.w (a1,d0*2),d1    ; left x on screen
  6794.  move.w (a0),d2
  6795.  move.w 2(a3,d2.w*4),d2
  6796.  move.w (a1,d2.w*2),d2
  6797.  cmp.w d1,d2
  6798.  bgt.s .leftnotoktoclip
  6799.  
  6800. ; move.w d1,(a6)
  6801. ; move.w d3,2(a6)
  6802.  cmp.w leftclip,d1
  6803.  ble.s .leftnotoktoclip
  6804.  move.w d1,leftclip
  6805. .leftnotoktoclip:
  6806.  
  6807.  addq #2,a0
  6808.  
  6809.  rts
  6810.  
  6811. NEWsetrclip
  6812.  move.l #OnScreen,a1
  6813.  move.l #Rotated,a2
  6814.  move.l CONNECT_TABLE,a3
  6815.  move.w (a0),d0
  6816.  bge.s .notignoreright
  6817. ; move.w #96,4(a6)
  6818. ; move.w #0,6(a6)
  6819.  move.w #0,d4
  6820.  bra .rightnotoktoclip
  6821. .notignoreright:
  6822.  move.w 6(a2,d0*8),d4    ; right z val
  6823.  bgt.s .rightclipinfront
  6824. ; move.w #96,4(a6)
  6825. ; move.w #0,6(a6)
  6826.  bra.s .rightnotoktoclip
  6827.  
  6828. .rightclipinfront:
  6829.  move.w (a1,d0*2),d1    ; right x on screen
  6830.  move.w (a0),d2
  6831.  move.w (a3,d2.w*4),d2
  6832.  move.w (a1,d2.w*2),d2
  6833.  cmp.w d1,d2
  6834.  blt.s .rightnotoktoclip
  6835. ; move.w d1,4(a6)
  6836. ; move.w d4,6(a6)
  6837.  
  6838.  cmp.w rightclip,d1
  6839.  bge.s .rightnotoktoclip
  6840.  addq #1,d1
  6841.  move.w d1,rightclip
  6842. .rightnotoktoclip:
  6843.  addq #8,a6
  6844.  addq #2,a0
  6845.  rts
  6846.  
  6847. FIRSTsetlrclip:
  6848.  move.l #OnScreen,a1
  6849.  move.l #Rotated,a2
  6850.  
  6851.  move.w (a0)+,d0
  6852.  bge.s .notignoreleft
  6853.  bra .leftnotoktoclip
  6854. .notignoreleft:
  6855.  
  6856.  move.w 6(a2,d0*8),d3    ; left z val
  6857.  bgt.s .leftclipinfront
  6858.  
  6859.  move.w (a0),d0
  6860.  blt.s .ignoreboth
  6861.  tst.w 6(a2,d0*8)
  6862.  bgt.s .leftnotoktoclip
  6863. .ignoreboth
  6864.  move.w RIGHTX,rightclip
  6865.  move.w #0,leftclip
  6866.  addq #2,a0
  6867.  rts
  6868.  
  6869. .leftclipinfront:
  6870.  move.w (a1,d0*2),d1    ; left x on screen
  6871.  cmp.w leftclip,d1
  6872.  ble.s .leftnotoktoclip
  6873.  move.w d1,leftclip
  6874. .leftnotoktoclip:
  6875.  
  6876.  move.w (a0)+,d0
  6877.  bge.s .notignoreright
  6878.  move.w #0,d4
  6879.  bra .rightnotoktoclip
  6880. .notignoreright:
  6881.  move.w 6(a2,d0*8),d4    ; right z val
  6882.  ble.s .rightnotoktoclip
  6883.  
  6884. .rightclipinfront:
  6885.  move.w (a1,d0*2),d1    ; right x on screen
  6886.  addq #1,d1
  6887.  cmp.w rightclip,d1
  6888.  bge.s .rightnotoktoclip
  6889.  move.w d1,rightclip
  6890. .rightnotoktoclip:
  6891.  
  6892. ; move.w leftclip,d0
  6893. ; move.w rightclip,d1
  6894. ; cmp.w d0,d1
  6895. ; bge.s .noswap
  6896. ; move.w #192,rightclip
  6897. ; move.w #0,leftclip
  6898. ;.noswap:
  6899.  
  6900.  rts
  6901.  
  6902.  
  6903. leftclip2: dc.w 0
  6904. rightclip2: dc.w 0
  6905. ZoneBright: dc.w 0
  6906.  
  6907. npolys: dc.w 0
  6908.  
  6909. PLR1_fire: dc.b 0
  6910. PLR2_fire: dc.b 0
  6911.  
  6912. *****************************************************
  6913.  
  6914.  
  6915. pastdata:
  6916. ***********************************
  6917. * This routine animates brightnesses.
  6918.  
  6919.  
  6920. liftpt: dc.l liftanimtab
  6921.  
  6922. brightpt:
  6923.  dc.l brightanimtab
  6924.  
  6925.  
  6926. liftanim:
  6927.  rts
  6928.  
  6929. ******************************
  6930.  include "ab3:source_4000/ObjectMove"
  6931.  include "ab3:source_4000/newAnims"
  6932.  include "ab3:source_4000/airoutine.s"
  6933. ******************************
  6934. startpass:
  6935. ; include "ab3:source_4000/password_reloc.s"
  6936. endpass:
  6937.  
  6938. rotanimpt: dc.w 0
  6939. xradd: dc.w 5
  6940. yradd: dc.w 8
  6941. xrpos: dc.w 320
  6942. yrpos: dc.w 320
  6943.  
  6944. rotanim:
  6945.  rts
  6946.  
  6947. option:
  6948.  dc.l 0,0
  6949.  
  6950. ********** WALL STUFF *******************************
  6951.  
  6952.  include "AB3:source_4000/hireswall.s"
  6953.  include "AB3:source_4000/hiresgourwall.s"
  6954.  
  6955. *****************************************************
  6956.  
  6957. ******************************************
  6958. * floor polygon
  6959.  
  6960. numsidestd: dc.w 0
  6961. bottomline: dc.w 0
  6962.  
  6963. checkforwater:
  6964.  tst.b usewater
  6965.  beq.s .notwater
  6966.  
  6967.  move.l Roompt,a1
  6968.  move.w (a1),d7
  6969.  cmp.w currzone,d7
  6970.  bne.s .notwater
  6971.  
  6972.  move.b #$f,fillscrnwater
  6973.  
  6974. .notwater:
  6975.  move.w (a0)+,d6    ; sides-1
  6976.  add.w d6,d6
  6977.  add.w d6,a0
  6978.  add.w #4+6,a0
  6979.  rts
  6980.  
  6981.  rts
  6982.  
  6983. NewCornerBuff:
  6984.  ds.l 100
  6985. CLRNOFLOOR: dc.w 0
  6986.  
  6987. itsafloordraw:
  6988.  
  6989. * If D0 =1 then its a floor otherwise (=2) it's
  6990. * a roof.
  6991.  
  6992.  move.w #0,above
  6993.  move.w (a0)+,d6    ; ypos of poly
  6994.  
  6995.  tst.b usewater
  6996.  beq.s .oknon
  6997.  tst.b DOANYWATER
  6998.  beq dontdrawreturn
  6999. .oknon
  7000.  
  7001.  move.w d6,d7
  7002.  ext.l d7
  7003.  asl.l #6,d7
  7004.  cmp.l TOPOFROOM,d7
  7005.  blt checkforwater
  7006.  cmp.l BOTOFROOM,d7
  7007.  bgt.s dontdrawreturn
  7008.  
  7009.  move.w leftclip,d7
  7010.  cmp.w rightclip,d7
  7011.  bge.s dontdrawreturn
  7012.  
  7013.  sub.w flooryoff,d6
  7014.  bgt.s below
  7015.  blt.s aboveplayer
  7016.  
  7017.  tst.b usewater
  7018.  beq.s .notwater
  7019.  
  7020.  move.l Roompt,a1
  7021.  move.w (a1),d7
  7022.  cmp.w currzone,d7
  7023.  
  7024.  bne.s .notwater
  7025.  
  7026.  st fillscrnwater
  7027.  
  7028. .notwater:
  7029.  
  7030.  
  7031. dontdrawreturn:
  7032.  move.w (a0)+,d6    ; sides-1
  7033.  add.w d6,d6
  7034.  add.w d6,a0
  7035.  add.w #4+6,a0
  7036.  rts
  7037. aboveplayer:
  7038.  
  7039.  tst.b usewater
  7040.  beq.s .notwater
  7041.  
  7042.  move.l Roompt,a1
  7043.  move.w (a1),d7
  7044.  cmp.w currzone,d7
  7045.  bne.s .notwater
  7046.  
  7047.  move.b #$f,fillscrnwater
  7048.  
  7049. .notwater:
  7050.  
  7051.  btst #1,d0
  7052.  beq.s dontdrawreturn
  7053.  move.w MIDDLEY,d7
  7054.  sub.w topclip,d7 
  7055.  ble.s dontdrawreturn
  7056.  move.w #1,d0
  7057.  move.w d0,above
  7058.  neg.w d6
  7059.  bra.s notbelow
  7060. below:
  7061.  move.w botclip,d7
  7062.  sub.w MIDDLEY,d7
  7063.  ble.s dontdrawreturn
  7064. notbelow:
  7065.  btst #0,d0
  7066.  beq.s dontdrawreturn
  7067.  move.w d6,distaddr
  7068.  muls #64,d6
  7069.  move.l d6,ypos
  7070.  ext.l d7
  7071.  divs.l d7,d6        ; zpos of bottom
  7072.             ; visible line
  7073.  
  7074.  beq dontdrawreturn
  7075.  
  7076.  cmp.l #32767,d6
  7077.  bgt dontdrawreturn
  7078.             
  7079.  move.w d6,minz
  7080.  move.w d7,bottomline
  7081.  
  7082. ; Go round each point finding out
  7083. ; if it should be visible or not.
  7084.  
  7085.  move.l a0,-(a7)
  7086.  
  7087.  move.w (a0)+,d7    ; number of sides
  7088.  move.l #Rotated,a1
  7089.  move.l #OnScreen,a2
  7090.  move.l #NewCornerBuff,a3
  7091.  moveq #0,d4
  7092.  moveq #0,d5
  7093.  moveq #0,d6
  7094.  clr.b anyclipping
  7095.  
  7096. cornerprocessloop:
  7097.  
  7098.  move.w (a0)+,d0
  7099.  and.w #$fff,d0
  7100.  move.w 6(a1,d0.w*8),d1
  7101.  ble  .canttell
  7102.  
  7103.  move.w (a2,d0.w*2),d3
  7104.  cmp.w leftclip,d3
  7105.  bgt.s .nol
  7106.  st d4
  7107.  st anyclipping
  7108.  bra.s .nos
  7109. .nol:
  7110.  cmp.w rightclip,d3
  7111.  blt.s .nor
  7112.  st d6
  7113.  st anyclipping
  7114.  bra.s .nos
  7115. .nor:
  7116.  st d5
  7117. .nos:
  7118.  bra .cantell
  7119.  
  7120. .canttell:
  7121.  st d5
  7122.  st anyclipping
  7123.  
  7124. .cantell:
  7125.  
  7126.  
  7127.  dbra d7,cornerprocessloop
  7128.  
  7129.  
  7130.  move.l (a7)+,a0
  7131.  tst.b d5
  7132.  bne.s somefloortodraw
  7133.  eor.b d4,d6
  7134.  bne dontdrawreturn
  7135.  
  7136. somefloortodraw:
  7137.  
  7138.  tst.b gourfloor
  7139.  bne goursides
  7140.  
  7141.  move.w #300,top
  7142.  move.w #-1,bottom
  7143.  move.w #0,drawit
  7144.  move.l #Rotated,a1
  7145.  move.l #OnScreen,a2
  7146.  move.w (a0)+,d7    ; no of sides
  7147. sideloop:
  7148.  move.w minz,d6
  7149.  move.w (a0)+,d1
  7150.  move.w (a0),d3
  7151.  and.w #$fff,d1
  7152.  and.w #$fff,d3
  7153.  
  7154.  move.w 6(a1,d1*8),d4    ;first z
  7155.  cmp.w d6,d4
  7156.  bgt firstinfront
  7157.  move.w 6(a1,d3*8),d5    ; sec z
  7158.  cmp.w d6,d5
  7159.  ble bothbehind
  7160. ** line must be on left and partially behind.
  7161.  sub.w d5,d4
  7162.  move.l (a1,d1*8),d0
  7163.  sub.l (a1,d3*8),d0
  7164.  asr.l #7,d0
  7165.  sub.w d5,d6
  7166.  muls d6,d0    ; new x coord
  7167.  divs d4,d0
  7168.  ext.l d0
  7169.  asl.l #7,d0
  7170.  
  7171.  add.l (a1,d3*8),d0
  7172.  move.w minz,d4
  7173.  move.w (a2,d3*2),d2
  7174.  divs d4,d0
  7175.  add.w MIDDLEX,d0
  7176.  move.l ypos,d3
  7177.  divs d5,d3
  7178.  move.w bottomline,d1 
  7179.  bra lineclipped
  7180.  
  7181. firstinfront:
  7182.  move.w 6(a1,d3*8),d5    ; sec z
  7183.  cmp.w d6,d5
  7184.  bgt bothinfront
  7185. ** line must be on right and partially behind.
  7186.  sub.w d4,d5    ; dz
  7187.  move.l (a1,d3*8),d2
  7188.  sub.l (a1,d1*8),d2    ; dx
  7189.  sub.w d4,d6
  7190.  asr.l #7,d2
  7191.  muls d6,d2    ; new x coord
  7192.  divs d5,d2
  7193.  ext.l d2
  7194.  asl.l #7,d2
  7195.  add.l (a1,d1*8),d2
  7196.  move.w minz,d5
  7197.  move.w (a2,d1*2),d0
  7198.  divs d5,d2
  7199.  add.w MIDDLEX,d2
  7200.  move.l ypos,d1
  7201.  divs d4,d1
  7202.  move.w bottomline,d3 
  7203.  bra lineclipped
  7204.  
  7205. bothinfront:
  7206.  
  7207. * Also, usefully enough, both are on-screen
  7208. * so no bottom clipping is needed.
  7209.  
  7210.  move.w (a2,d1*2),d0    ; first x
  7211.  move.w (a2,d3*2),d2    ; second x
  7212.  move.l ypos,d1
  7213.  move.l d1,d3
  7214.  divs d4,d1        ; first y
  7215.  divs d5,d3        ; second y
  7216. lineclipped:
  7217.  move.l #rightsidetab,a3
  7218.  cmp.w d1,d3
  7219.  beq lineflat
  7220.  st drawit
  7221.  bgt lineonright
  7222.  move.l #leftsidetab,a3
  7223.  exg d1,d3
  7224.  exg d0,d2
  7225.  
  7226.  lea (a3,d1*2),a3
  7227.  
  7228.  cmp.w top(pc),d1
  7229.  bge.s .nonewtop
  7230.  move.w d1,top
  7231. .nonewtop:
  7232.  cmp.w bottom(pc),d3
  7233.  ble.s .nonewbot
  7234.  move.w d3,bottom
  7235. .nonewbot:
  7236.  
  7237.  sub.w d1,d3    ; dy
  7238.  sub.w d0,d2    ; dx
  7239.  
  7240.  blt .linegoingleft
  7241.  
  7242.  ext.l d2
  7243.  divs d3,d2
  7244.  move.w d2,d6
  7245.  swap d2
  7246.  
  7247. ; moveq #0,d6
  7248. ; sub.w d3,d2
  7249. ; blt.s .noco
  7250. ;.makeco
  7251. ; addq #1,d6
  7252. ; sub.w d3,d2
  7253. ; bge.s .makeco
  7254. ;.noco
  7255. ; add.w d3,d2
  7256.  
  7257.  move.w d3,d4
  7258.  move.w d3,d5
  7259.  subq #1,d5
  7260.  move.w d6,d1
  7261.  addq #1,d1
  7262.  
  7263. .pixlopright:
  7264.  move.w d0,(a3)+
  7265.  sub.w d2,d4
  7266.  bge.s .nobigstep
  7267.  add.w d1,d0
  7268.  add.w d3,d4
  7269.  dbra d5,.pixlopright
  7270.  bra lineflat
  7271. .nobigstep
  7272.  add.w d6,d0
  7273.  dbra d5,.pixlopright
  7274.  bra lineflat
  7275.  
  7276. .linegoingleft:
  7277.  
  7278.  neg.w d2
  7279.  
  7280.  ext.l d2
  7281.  divs d3,d2
  7282.  move.w d2,d6
  7283.  swap d2
  7284.  
  7285.  
  7286. ; moveq #0,d6
  7287. ; sub.w d3,d2
  7288. ; blt.s .nocol
  7289. ;.makecol
  7290. ; addq #1,d6
  7291. ; sub.w d3,d2
  7292. ; bge.s .makecol
  7293. ;.nocol
  7294. ; add.w d3,d2
  7295.  
  7296.  
  7297.  
  7298.  move.w d3,d4
  7299.  move.w d3,d5
  7300.  subq #1,d5
  7301.  
  7302.  move.w d6,d1
  7303.  addq #1,d1
  7304.  
  7305. .pixlopleft:
  7306.  sub.w d2,d4
  7307.  bge.s .nobigstepl
  7308.  sub.w d1,d0
  7309.  add.w d3,d4
  7310.  move.w d0,(a3)+
  7311.  dbra d5,.pixlopleft
  7312.  bra lineflat
  7313.  
  7314. .nobigstepl
  7315.  sub.w d6,d0
  7316.  move.w d0,(a3)+
  7317.  dbra d5,.pixlopleft
  7318.  bra lineflat
  7319.  
  7320. lineonright:
  7321.  
  7322.  lea (a3,d1*2),a3
  7323.  
  7324.  cmp.w top(pc),d1
  7325.  bge.s .nonewtop
  7326.  move.w d1,top
  7327. .nonewtop:
  7328.  cmp.w bottom(pc),d3
  7329.  ble.s .nonewbot
  7330.  move.w d3,bottom
  7331. .nonewbot:
  7332.  
  7333.  sub.w d1,d3    ; dy
  7334.  sub.w d0,d2    ; dx
  7335.  blt .linegoingleft
  7336. ; addq #1,d0
  7337.  ext.l d2
  7338.  divs d3,d2
  7339.  move.w d2,d6
  7340.  swap d2
  7341.  
  7342. ; moveq #0,d6
  7343. ; sub.w d3,d2
  7344. ; blt.s .noco
  7345. ;.makeco
  7346. ; addq #1,d6
  7347. ; sub.w d3,d2
  7348. ; bge.s .makeco
  7349. ;.noco
  7350. ; add.w d3,d2
  7351.  
  7352.  move.w d3,d4
  7353.  move.w d3,d5
  7354.  subq #1,d5
  7355.  move.w d6,d1
  7356.  addq #1,d1
  7357.  
  7358. .pixlopright:
  7359.  sub.w d2,d4
  7360.  bge.s .nobigstep
  7361.  add.w d1,d0
  7362.  add.w d3,d4
  7363.  move.w d0,(a3)+
  7364.  dbra d5,.pixlopright
  7365.  bra lineflat
  7366.  
  7367. .nobigstep
  7368.  add.w d6,d0
  7369.  move.w d0,(a3)+
  7370.  dbra d5,.pixlopright
  7371.  bra lineflat
  7372.  
  7373. .linegoingleft:
  7374. ; addq #1,d0
  7375.  neg.w d2
  7376.  
  7377.  ext.l d2
  7378.  divs d3,d2
  7379.  move.w d2,d6
  7380.  swap d2
  7381.  
  7382.  
  7383. ; moveq #0,d6
  7384. ; sub.w d3,d2
  7385. ; blt.s .nocol
  7386. ;.makecol
  7387. ; addq #1,d6
  7388. ; sub.w d3,d2
  7389. ; bge.s .makecol
  7390. ;.nocol
  7391. ; add.w d3,d2
  7392.  
  7393.  move.w d3,d4
  7394.  move.w d3,d5
  7395.  subq #1,d5
  7396.  move.w d6,d1
  7397.  addq #1,d1
  7398.  
  7399. .pixlopleft:
  7400.  move.w d0,(a3)+
  7401.  sub.w d2,d4
  7402.  bge.s .nobigstepl
  7403.  sub.w d1,d0
  7404.  add.w d3,d4
  7405.  dbra d5,.pixlopleft
  7406.  bra lineflat
  7407.  
  7408. .nobigstepl
  7409.  sub.w d6,d0
  7410.  dbra d5,.pixlopleft
  7411.  
  7412. lineflat:
  7413.  
  7414. bothbehind:
  7415.  dbra d7,sideloop
  7416.  bra pastsides
  7417.  
  7418. fbr: dc.w 0
  7419. sbr: dc.w 0
  7420. FloorPtBrights: dc.l 0
  7421.  
  7422. goursides:
  7423.  
  7424.  move.w #300,top
  7425.  move.w #-1,bottom
  7426.  move.w #0,drawit
  7427.  move.l #Rotated,a1
  7428.  move.l #OnScreen,a2
  7429.  move.w (a0)+,d7    ; no of sides
  7430. sideloopGOUR:
  7431.  move.w minz,d6
  7432.  move.w (a0)+,d1
  7433.  move.w (a0),d3
  7434.  
  7435.  move.w d1,d4
  7436.  move.w d3,d5
  7437.  and.w #$0fff,d1
  7438.  and.w #$0fff,d3
  7439.  
  7440.  rol.w #4,d4
  7441.  rol.w #4,d5
  7442.  and.w #$f,d4
  7443.  and.w #$f,d5
  7444.  
  7445.  move.l FloorPtBrights,a4
  7446.  move.w (a4,d4.w*8),d4
  7447.  bge.s .okpos1
  7448.  neg.w d4
  7449. .okpos1:
  7450.  sub.w #300,d4
  7451.  move.w d4,fbr
  7452.  move.w (a4,d5.w*8),d4
  7453.  bge.s .okpos2
  7454.  neg.w d4
  7455. .okpos2:
  7456.  sub.w #300,d4
  7457.  move.w d4,sbr
  7458.  
  7459.  move.w 6(a1,d1*8),d4    ;first z
  7460.  cmp.w d6,d4
  7461.  bgt firstinfrontGOUR
  7462.  move.w 6(a1,d3*8),d5    ; sec z
  7463.  cmp.w d6,d5
  7464.  ble bothbehindGOUR
  7465. ** line must be on left and partially behind.
  7466.  sub.w d5,d4
  7467.  
  7468.  move.w fbr,d0
  7469.  sub.w sbr,d0
  7470.  sub.w d5,d6
  7471.  muls d6,d0
  7472.  divs d4,d0
  7473.  add.w sbr,d0
  7474.  move.w d0,fbr
  7475.  
  7476.  move.l (a1,d1*8),d0
  7477.  sub.l (a1,d3*8),d0
  7478.  asr.l #7,d0
  7479.  muls d6,d0    ; new x coord
  7480.  divs d4,d0
  7481.  ext.l d0
  7482.  asl.l #7,d0
  7483.  
  7484.  add.l (a1,d3*8),d0
  7485.  move.w minz,d4
  7486.  move.w (a2,d3*2),d2
  7487.  divs d4,d0
  7488.  add.w MIDDLEX,d0
  7489.  move.l ypos,d3
  7490.  divs d5,d3
  7491.  
  7492.  move.w bottomline,d1 
  7493.  bra lineclippedGOUR
  7494.  
  7495. firstinfrontGOUR:
  7496.  move.w 6(a1,d3*8),d5    ; sec z
  7497.  cmp.w d6,d5
  7498.  bgt bothinfrontGOUR
  7499. ** line must be on right and partially behind.
  7500.  sub.w d4,d5    ; dz
  7501.  
  7502.  move.w sbr,d2
  7503.  sub.w fbr,d2
  7504.  sub.w d4,d6
  7505.  muls d6,d2
  7506.  divs d5,d2
  7507.  add.w fbr,d2
  7508.  move.w d2,sbr
  7509.  
  7510.  move.l (a1,d3*8),d2
  7511.  sub.l (a1,d1*8),d2    ; dx
  7512.  asr.l #7,d2
  7513.  muls d6,d2    ; new x coord
  7514.  divs d5,d2
  7515.  ext.l d2
  7516.  asl.l #7,d2
  7517.  add.l (a1,d1*8),d2
  7518.  move.w minz,d5
  7519.  move.w (a2,d1*2),d0
  7520.  divs d5,d2
  7521.  add.w MIDDLEX,d2
  7522.  move.l ypos,d1
  7523.  divs d4,d1
  7524.  move.w bottomline,d3 
  7525.  bra lineclippedGOUR
  7526.  
  7527. bothinfrontGOUR:
  7528.  
  7529. * Also, usefully enough, both are on-screen
  7530. * so no bottom clipping is needed.
  7531.  
  7532.  move.w (a2,d1*2),d0    ; first x
  7533.  move.w (a2,d3*2),d2    ; second x
  7534.  move.l ypos,d1
  7535.  move.l d1,d3
  7536.  divs d4,d1        ; first y
  7537.  divs d5,d3        ; second y
  7538. lineclippedGOUR:
  7539.  move.l #rightsidetab,a3
  7540.  cmp.w d1,d3
  7541.  bne linenotflatGOUR
  7542.  
  7543. ; move.w fbr,d4
  7544. ; move.w sbr,d5
  7545. ; cmp.w d0,d2
  7546. ; bgt.s .nsw
  7547. ; exg d4,d5
  7548. ;.nsw:
  7549.  
  7550. ; move.l #leftbrighttab,a3
  7551. ; move.w d4,(a3,d3.w)
  7552. ; move.l #rightbrighttab,a3
  7553. ; move.w d5,(a3,d3.w) 
  7554.  bra lineflatGOUR
  7555.  
  7556. linenotflatGOUR
  7557.  st drawit
  7558.  bgt lineonrightGOUR
  7559.  move.l #leftsidetab,a3
  7560.  exg d1,d3
  7561.  exg d0,d2
  7562.  
  7563.  lea (a3,d1*2),a3
  7564.  lea leftbrighttab-leftsidetab(a3),a4
  7565.  
  7566.  cmp.w top(pc),d1
  7567.  bge.s .nonewtop
  7568.  move.w d1,top
  7569. .nonewtop:
  7570.  cmp.w bottom(pc),d3
  7571.  ble.s .nonewbot
  7572.  move.w d3,bottom
  7573. .nonewbot:
  7574.  
  7575.  sub.w d1,d3    ; dy
  7576.  sub.w d0,d2    ; dx
  7577.  
  7578.  blt .linegoingleft
  7579.  
  7580.  ext.l d2
  7581.  divs d3,d2
  7582.  move.w d2,d6
  7583.  swap d2
  7584.  move.w d2,a5
  7585.  
  7586. ; moveq #0,d6
  7587. ; sub.w d3,d2
  7588. ; blt.s .noco
  7589. ;.makeco
  7590. ; addq #1,d6
  7591. ; sub.w d3,d2
  7592. ; bge.s .makeco
  7593. ;.noco
  7594. ; add.w d3,d2
  7595.  
  7596.  move.w d3,d4
  7597.  move.w d3,d5
  7598.  subq #1,d5
  7599.  move.w d6,d1
  7600.  addq #1,d1
  7601.  move.w d1,a6
  7602.  
  7603.  moveq #0,d1
  7604.  move.w sbr,d1
  7605.  move.w fbr,d2
  7606.  sub.w d1,d2
  7607.  ext.l d2
  7608.  asl.w #8,d2
  7609.  asl.w #2,d2
  7610.  divs d3,d2 
  7611.  ext.l d2
  7612.  asl.l #6,d2
  7613.  swap d1
  7614.  
  7615. .pixlopright:
  7616.  move.w d0,(a3)+
  7617.  swap d1
  7618.  move.w d1,(a4)+
  7619.  swap d1
  7620.  add.l d2,d1
  7621.  
  7622.  sub.w a5,d4
  7623.  bge.s .nobigstep
  7624.  add.w a6,d0
  7625.  add.w d3,d4
  7626.  dbra d5,.pixlopright
  7627.  bra lineflatGOUR
  7628. .nobigstep
  7629.  
  7630.  add.w d6,d0
  7631.  dbra d5,.pixlopright
  7632.  bra lineflatGOUR
  7633.  
  7634. .linegoingleft:
  7635.  
  7636.  neg.w d2
  7637.  
  7638.  ext.l d2
  7639.  divs d3,d2
  7640.  move.w d2,d6
  7641.  swap d2
  7642.  
  7643.  
  7644. ; moveq #0,d6
  7645. ; sub.w d3,d2
  7646. ; blt.s .nocol
  7647. ;.makecol
  7648. ; addq #1,d6
  7649. ; sub.w d3,d2
  7650. ; bge.s .makecol
  7651. ;.nocol
  7652. ; add.w d3,d2
  7653.  
  7654.  move.w d3,d4
  7655.  move.w d3,d5
  7656.  subq #1,d5
  7657.  
  7658.  move.w d6,d1
  7659.  addq #1,d1
  7660.  move.w d1,a6
  7661.  move.w d2,a5
  7662.  
  7663.  moveq #0,d1
  7664.  move.w sbr,d1
  7665.  move.w fbr,d2
  7666.  sub.w d1,d2
  7667.  ext.l d2
  7668.  asl.w #8,d2
  7669.  asl.w #2,d2
  7670.  divs d3,d2 
  7671.  ext.l d2
  7672.  asl.l #6,d2
  7673.  swap d1
  7674.  
  7675. .pixlopleft:
  7676.  
  7677.  swap d1
  7678.  move.w d1,(a4)+
  7679.  swap d1
  7680.  add.l d2,d1
  7681.  
  7682.  sub.w a5,d4
  7683.  bge.s .nobigstepl
  7684.  sub.w a6,d0
  7685.  add.w d3,d4
  7686.  move.w d0,(a3)+
  7687.  dbra d5,.pixlopleft
  7688.  bra lineflatGOUR
  7689.  
  7690. .nobigstepl
  7691.  sub.w d6,d0
  7692.  move.w d0,(a3)+
  7693.  dbra d5,.pixlopleft
  7694.  bra lineflatGOUR
  7695.  
  7696. lineonrightGOUR:
  7697.  
  7698.  lea (a3,d1*2),a3
  7699.  
  7700.  lea rightbrighttab-rightsidetab(a3),a4
  7701.  
  7702.  cmp.w top(pc),d1
  7703.  bge.s .nonewtop
  7704.  move.w d1,top
  7705. .nonewtop:
  7706.  cmp.w bottom(pc),d3
  7707.  ble.s .nonewbot
  7708.  move.w d3,bottom
  7709. .nonewbot:
  7710.  
  7711.  sub.w d1,d3    ; dy
  7712.  sub.w d0,d2    ; dx
  7713.  blt .linegoingleft
  7714. ; addq #1,d0
  7715.  ext.l d2
  7716.  divs d3,d2
  7717.  move.w d2,d6
  7718.  swap d2
  7719.  
  7720. ; moveq #0,d6
  7721. ; sub.w d3,d2
  7722. ; blt.s .noco
  7723. ;.makeco
  7724. ; addq #1,d6
  7725. ; sub.w d3,d2
  7726. ; bge.s .makeco
  7727. ;.noco
  7728. ; add.w d3,d2
  7729.  
  7730.  move.w d3,d4
  7731.  move.w d3,d5
  7732.  subq #1,d5
  7733.  move.w d6,d1
  7734.  addq #1,d1
  7735.  
  7736.  move.w d1,a6
  7737.  move.w d2,a5
  7738.  
  7739.  moveq #0,d1
  7740.  move.w fbr,d1
  7741.  move.w sbr,d2
  7742.  sub.w d1,d2
  7743.  ext.l d2
  7744.  asl.w #8,d2
  7745.  asl.w #2,d2
  7746.  divs d3,d2 
  7747.  ext.l d2
  7748.  asl.l #6,d2
  7749.  swap d1
  7750.  
  7751. .pixlopright:
  7752.  
  7753.  swap d1
  7754.  move.w d1,(a4)+
  7755.  swap d1
  7756.  add.l d2,d1
  7757.  
  7758.  sub.w a5,d4
  7759.  bge.s .nobigstep
  7760.  add.w a6,d0
  7761.  add.w d3,d4
  7762.  move.w d0,(a3)+
  7763.  dbra d5,.pixlopright
  7764.  bra lineflatGOUR
  7765.  
  7766. .nobigstep
  7767.  add.w d6,d0
  7768.  move.w d0,(a3)+
  7769.  dbra d5,.pixlopright
  7770.  bra lineflatGOUR
  7771.  
  7772. .linegoingleft:
  7773. ; addq #1,d0
  7774.  neg.w d2
  7775.  
  7776.  ext.l d2
  7777.  divs d3,d2
  7778.  move.w d2,d6
  7779.  swap d2
  7780.  
  7781.  
  7782. ; moveq #0,d6
  7783. ; sub.w d3,d2
  7784. ; blt.s .nocol
  7785. ;.makecol
  7786. ; addq #1,d6
  7787. ; sub.w d3,d2
  7788. ; bge.s .makecol
  7789. ;.nocol
  7790. ; add.w d3,d2
  7791.  
  7792.  move.w d3,d4
  7793.  move.w d3,d5
  7794.  subq #1,d5
  7795.  move.w d6,d1
  7796.  addq #1,d1
  7797.  move.w d1,a6
  7798.  move.w d2,a5
  7799.  
  7800.  moveq #0,d1
  7801.  move.w fbr,d1
  7802.  move.w sbr,d2
  7803.  sub.w d1,d2
  7804.  ext.l d2
  7805.  asl.w #8,d2
  7806.  asl.w #2,d2
  7807.  divs d3,d2 
  7808.  ext.l d2
  7809.  asl.l #6,d2
  7810.  swap d1
  7811.  
  7812. .pixlopleft:
  7813.  
  7814.  swap d1
  7815.  move.w d1,(a4)+
  7816.  swap d1
  7817.  add.l d2,d1
  7818.  
  7819.  move.w d0,(a3)+
  7820.  sub.w a5,d4
  7821.  bge.s .nobigstepl
  7822.  sub.w a6,d0
  7823.  add.w d3,d4
  7824.  dbra d5,.pixlopleft
  7825.  bra lineflatGOUR
  7826.  
  7827. .nobigstepl
  7828.  sub.w d6,d0
  7829.  dbra d5,.pixlopleft
  7830.  
  7831. lineflatGOUR:
  7832.  
  7833. bothbehindGOUR:
  7834.  dbra d7,sideloopGOUR
  7835.  
  7836. pastsides:
  7837.  
  7838.  addq #2,a0
  7839.  
  7840.  move.w #320,linedir
  7841.  
  7842. ; move.l FASTBUFFER2,a6
  7843. ; add.l BIGMIDDLEY,a6
  7844. ; move.l a6,REFPTR
  7845.  
  7846.  move.l FASTBUFFER,a6
  7847.  add.l BIGMIDDLEY,a6
  7848.  move.w (a0)+,d6
  7849.  add.w SMALLIT,d6
  7850.  move.w d6,scaleval
  7851.  move.w (a0)+,whichtile
  7852.  move.w (a0)+,d6
  7853.  add.w ZoneBright,d6
  7854.  move.w d6,lighttype
  7855.  move.w above(pc),d6
  7856.  beq groundfloor
  7857. * on ceiling:
  7858.  move.w #-320,linedir
  7859.  suba.w #320,a6
  7860. groundfloor:
  7861.  
  7862.  move.w xoff,d6
  7863.  move.w zoff,d7
  7864.  add.w xwobxoff,d7
  7865.  add.w xwobzoff,d6
  7866.  ext.l d6
  7867.  ext.l d7
  7868.  
  7869.  tst.b FULLSCR
  7870.  beq.s .shiftit
  7871.  
  7872.  asl.l #2,d6
  7873.  asl.l #2,d7
  7874.  divs #3,d6
  7875.  divs #3,d7
  7876.  swap d6
  7877.  swap d7
  7878.  clr.w d6
  7879.  clr.w d7
  7880.  asr.l #2,d6
  7881.  asr.l #2,d7
  7882.  bra.s .donsht
  7883.  
  7884. .shiftit
  7885.  
  7886. ; divs #3,d6
  7887. ; divs #3,d7
  7888.  swap d6
  7889.  swap d7
  7890.  clr.w d6
  7891.  clr.w d7
  7892.  asr.l #1,d6
  7893.  asr.l #1,d7
  7894. .donsht:
  7895.  move.w scaleval(pc),d3
  7896.  beq.s .samescale
  7897.  bgt.s .scaledown
  7898.  neg.w d3
  7899.  asr.l d3,d7
  7900.  asr.l d3,d6
  7901.  bra.s .samescale
  7902. .scaledown:
  7903.  asl.l d3,d6
  7904.  asl.l d3,d7
  7905. .samescale
  7906.  move.l d6,sxoff
  7907.  move.l d7,szoff
  7908.  bra pastscale 
  7909.  
  7910.  asr.l #3,d1
  7911.  asr.l #3,d2
  7912.  asr.l #2,d1
  7913.  asr.l #2,d2
  7914.  asr.l #1,d1
  7915.  asr.l #1,d2
  7916. scaleprogfrom
  7917.  nop
  7918.  nop
  7919.  asl.l #1,d1
  7920.  asl.l #1,d2
  7921.  asl.l #2,d1
  7922.  asl.l #2,d2
  7923.  asl.l #3,d1
  7924.  asl.l #3,d2
  7925.  
  7926. top: dc.w 0
  7927. bottom: dc.w 0
  7928. ypos: dc.l 0
  7929. nfloors: dc.w 0
  7930. lighttype: dc.w 0
  7931. above: dc.w 0 
  7932. linedir: dc.w 0
  7933. distaddr: dc.w 0
  7934.  
  7935. minz: dc.l 0
  7936.  
  7937. leftsidetab:
  7938.  ds.w 512*2
  7939. rightsidetab:
  7940.  ds.w 512*2
  7941. leftbrighttab:
  7942.  ds.w 512*2
  7943. rightbrighttab:
  7944.  ds.w 512*2
  7945.  
  7946. PointBrights:
  7947.  dc.l 0
  7948. CurrentPointBrights:
  7949.  ds.l 2*256*10
  7950.  
  7951. movespd: dc.w 0
  7952. largespd: dc.l 0
  7953. disttobot: dc.w 0
  7954.  
  7955. pastscale:
  7956.  
  7957.  
  7958.  tst.b drawit(pc)
  7959.  beq dontdrawfloor
  7960.  
  7961.  tst.b DOUBLEHEIGHT
  7962.  beq pix1h
  7963.  
  7964.  move.l a0,-(a7)
  7965.  move.w linedir,d1
  7966.  add.w d1,linedir
  7967.  
  7968.  move.l #leftsidetab,a4
  7969.  move.w top(pc),d1
  7970.  tst.w above
  7971.  beq.s .clipfloor
  7972.  
  7973.  sub.w #320,a6
  7974.  
  7975.  move.w MIDDLEY,d7
  7976.  subq #1,d7
  7977.  sub.w d1,d7
  7978.  move.w d7,disttobot
  7979.  
  7980.  move.w bottom(pc),d7
  7981.  move.w MIDDLEY,d3
  7982.  move.w d3,d4
  7983.  sub.w topclip,d3
  7984.  sub.w botclip,d4
  7985.  cmp.w d3,d1
  7986.  bge predontdrawfloor
  7987.  cmp.w d4,d7
  7988.  blt predontdrawfloor
  7989.  cmp.w d4,d1
  7990.  bge.s .nocliptoproof
  7991.  move.w d4,d1
  7992. .nocliptoproof
  7993.  cmp.w d3,d7
  7994.  blt .doneclip
  7995.  move.w d3,d7
  7996.  bra .doneclip
  7997.  
  7998. .clipfloor:
  7999.  move.w BOTTOMY,d7
  8000.  sub.w MIDDLEY,d7
  8001.  subq #1,d7
  8002.  sub.w d1,d7
  8003.  move.w d7,disttobot
  8004.  
  8005.  move.w bottom(pc),d7
  8006.  move.w botclip,d4
  8007.  sub.w MIDDLEY,d4
  8008.  cmp.w d4,d1
  8009.  bge predontdrawfloor
  8010.  move.w topclip,d3
  8011.  sub.w MIDDLEY,d3
  8012.  cmp.w d3,d1
  8013.  bge.s .nocliptopfloor
  8014.  move.w d3,d1
  8015. .nocliptopfloor 
  8016.  cmp.w d3,d7
  8017.  ble predontdrawfloor
  8018.  cmp.w d4,d7
  8019.  blt.s .noclipbotfloor
  8020.  move.w d4,d7
  8021. .noclipbotfloor:
  8022.  
  8023. .doneclip:
  8024.  
  8025.  lea (a4,d1*2),a4
  8026.  addq #1,d7
  8027.  sub.w d1,d7
  8028.  
  8029. ;moveq #0,d0
  8030.  asr.w #1,d1
  8031. ; addx d0,d1
  8032.  
  8033. ; move.l #dists,a2
  8034.  move.w distaddr,d0
  8035.  muls #64,d0
  8036.  move.l d0,a2
  8037. ; muls #25,d0
  8038. ; adda.w d0,a2
  8039. ; lea (a2,d1*2),a2
  8040.  asr.w #1,d7
  8041.  ble predontdrawfloor 
  8042.  move.w d1,d0
  8043.  bne.s .notzero
  8044.  moveq #1,d0
  8045. .notzero
  8046.  add.w d0,d0
  8047.  muls linedir,d1
  8048.  add.l d1,a6
  8049. ; sub.l d1,REFPTR
  8050.  move.l #floorscalecols,a1
  8051.  move.l LineToUse,a5
  8052.  
  8053.  move.w #4,tonextline
  8054.  
  8055.  bra pix2h
  8056.  
  8057. pix1h:
  8058.  
  8059.  move.l a0,-(a7)
  8060.  
  8061.  move.l #leftsidetab,a4
  8062.  move.w top(pc),d1
  8063.   
  8064.  tst.w above
  8065.  beq.s clipfloor
  8066.  
  8067.  move.w MIDDLEY,d7
  8068.  subq #1,d7
  8069.  sub.w d1,d7
  8070.  move.w d7,disttobot
  8071.  
  8072.  move.w bottom(pc),d7
  8073.  move.w MIDDLEY,d3
  8074.  move.w d3,d4
  8075.  sub.w topclip,d3
  8076.  sub.w botclip,d4
  8077.  cmp.w d3,d1
  8078.  bge predontdrawfloor
  8079.  cmp.w d4,d7
  8080.  blt predontdrawfloor
  8081.  cmp.w d4,d1
  8082.  bge.s .nocliptoproof
  8083.  move.w d4,d1
  8084. .nocliptoproof
  8085.  cmp.w d3,d7
  8086.  blt doneclip
  8087.  move.w d3,d7
  8088.  bra doneclip
  8089.  
  8090. clipfloor:
  8091.  move.w BOTTOMY,d7
  8092.  sub.w MIDDLEY,d7
  8093.  subq #1,d7
  8094.  sub.w d1,d7
  8095.  move.w d7,disttobot
  8096.  
  8097.  move.w bottom(pc),d7
  8098.  move.w botclip,d4
  8099.  sub.w MIDDLEY,d4
  8100.  cmp.w d4,d1
  8101.  bge predontdrawfloor
  8102.  move.w topclip,d3
  8103.  sub.w MIDDLEY,d3
  8104.  cmp.w d3,d1
  8105.  bge.s .nocliptopfloor
  8106.  move.w d3,d1
  8107. .nocliptopfloor 
  8108.  cmp.w d3,d7
  8109.  ble predontdrawfloor
  8110.  cmp.w d4,d7
  8111.  blt.s .noclipbotfloor
  8112.  move.w d4,d7
  8113. .noclipbotfloor:
  8114.  
  8115. doneclip:
  8116.  
  8117.  lea (a4,d1*2),a4
  8118. ; move.l #dists,a2
  8119.  move.w distaddr,d0
  8120.  muls #64,d0
  8121.  move.l d0,a2
  8122. ; muls #25,d0
  8123. ; adda.w d0,a2
  8124. ; lea (a2,d1*2),a2
  8125.  sub.w d1,d7
  8126.  ble predontdrawfloor 
  8127.  move.w d1,d0
  8128.  bne.s .notzero
  8129.  moveq #1,d0
  8130. .notzero
  8131.  muls linedir,d1
  8132.  add.l d1,a6
  8133. ; sub.l d1,REFPTR
  8134.  move.l #floorscalecols,a1
  8135.  move.l LineToUse,a5
  8136.  
  8137.  move.w #2,tonextline
  8138.  
  8139. pix2h:
  8140.  
  8141.  tst.b gourfloor
  8142.  bne dogourfloor
  8143.  
  8144.  tst.b anyclipping
  8145.  beq dofloornoclip
  8146.  
  8147. dofloor:
  8148. ; move.w (a2)+,d0
  8149.  move.w leftclip,d3
  8150.  move.w rightclip,d4
  8151.  move.w rightsidetab-leftsidetab(a4),d2
  8152.  
  8153.  addq #1,d2
  8154.  cmp.w d3,d2
  8155.  ble.s nodrawline
  8156.  cmp.w d4,d2
  8157.  ble.s noclipright
  8158.  move.w d4,d2
  8159. noclipright:
  8160.  move.w (a4),d1
  8161.  cmp.w d4,d1
  8162.  bge.s nodrawline
  8163.  cmp.w d3,d1
  8164.  bge.s noclipleft
  8165.  move.w d3,d1
  8166. noclipleft:
  8167.  cmp.w d1,d2
  8168.  ble.s nodrawline
  8169.  
  8170.  move.w d1,leftedge
  8171.  move.w d2,rightedge
  8172.  
  8173. ; moveq #0,d1
  8174. ; moveq #0,d3
  8175. ; move.w leftbrighttab-leftsidetab(a4),d1
  8176. ; bge.s .okbl
  8177. ; moveq #0,d1
  8178. ;.okbl:
  8179.  
  8180. ; move.w rightbrighttab-leftsidetab(a4),d3
  8181. ; bge.s .okbr
  8182. ; moveq #0,d3
  8183. ;.okbr:
  8184.  
  8185. ; sub.w d1,d3
  8186. ; asl.w #8,d1
  8187. ; move.l d1,leftbright
  8188. ; swap d3
  8189. ; asr.l #5,d3
  8190. ; divs d5,d3
  8191. ; move.w d3,d5
  8192. ; muls.w d6,d5
  8193. ; asr.l #3,d5
  8194. ; clr.b d5
  8195. ; add.w d5,leftbright+2
  8196.  
  8197. ; ext.l d3
  8198. ; asl.l #5,d3
  8199. ; swap d3
  8200. ; asl.w #8,d3
  8201. ; move.l d3,brightspd
  8202.  
  8203.  move.l a6,a3
  8204.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8205.  move.l a2,d7
  8206.  asl.l #2,d7
  8207.  ext.l d0
  8208.  divs.l d0,d7
  8209.  move.l d7,d0
  8210.  jsr (a5)
  8211.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8212. nodrawline
  8213.  sub.w #1,disttobot
  8214.  move.w linedir(pc),d3
  8215.  adda.w d3,a6
  8216. ; ext.l d3
  8217. ; sub.l d3,REFPTR
  8218.  move.w tonextline,d3
  8219.  add.w d3,a4
  8220.  asr.w #1,d3
  8221.  add.w d3,d0
  8222.  subq #1,d7
  8223.  bgt dofloor
  8224.  
  8225. predontdrawfloor
  8226.  move.l (a7)+,a0
  8227.  
  8228. dontdrawfloor:
  8229.  
  8230.  rts
  8231.  
  8232. tonextline: dc.w 0
  8233. anyclipping: dc.w 0
  8234.  
  8235. dofloornoclip:
  8236. ; move.w (a2)+,d0
  8237.  move.w rightsidetab-leftsidetab(a4),d2
  8238.  addq #1,d2
  8239.  move.w (a4),d1
  8240.  move.w d1,leftedge
  8241.  move.w d2,rightedge
  8242.  
  8243. ; sub.w d1,d2
  8244.  
  8245. ; moveq #0,d1
  8246. ; moveq #0,d3
  8247. ; move.w leftbrighttab-leftsidetab(a4),d1
  8248. ; bge.s .okbl
  8249. ; moveq #0,d1
  8250. ;.okbl:
  8251.  
  8252. ; move.w rightbrighttab-leftsidetab(a4),d3
  8253. ; bge.s .okbr
  8254. ; moveq #0,d3
  8255. ;.okbr:
  8256.  
  8257. ; sub.w d1,d3
  8258. ; asl.w #8,d1
  8259. ; move.l d1,leftbright
  8260. ; swap d3
  8261. ; asr.l #5,d3
  8262. ; divs d2,d3
  8263. ; ext.l d3
  8264. ; asl.l #5,d3
  8265. ; swap d3
  8266. ; asl.w #8,d3
  8267. ; move.l d3,brightspd
  8268.  
  8269.  move.l a6,a3
  8270.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8271.  move.l a2,d7
  8272.  asl.l #2,d7
  8273.  ext.l d0
  8274.  divs.l d0,d7
  8275.  move.l d7,d0
  8276.  jsr (a5)
  8277.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8278.  sub.w #1,disttobot
  8279.  move.w linedir(pc),d3
  8280.  adda.w d3,a6
  8281. ; ext.l d3
  8282. ; sub.l d3,REFPTR
  8283.  move.w tonextline,d3
  8284.  add.w d3,a4
  8285.  asr.w #1,d3
  8286.  add.w d3,d0
  8287.  subq #1,d7
  8288.  bgt dofloornoclip
  8289.  
  8290.  bra predontdrawfloor
  8291.  
  8292. dogourfloor:
  8293.  tst.b anyclipping
  8294.  beq dofloornoclipGOUR
  8295.  
  8296. dofloorGOUR:
  8297. ; move.w (a2)+,d0
  8298.  move.w leftclip,d3
  8299.  move.w rightclip,d4
  8300.  move.w rightsidetab-leftsidetab(a4),d2
  8301.  
  8302.  move.w d2,d5
  8303.  sub.w (a4),d5
  8304.  addq #1,d5
  8305.  moveq #0,d6
  8306.  
  8307.  addq #1,d2
  8308.  cmp.w d3,d2
  8309.  ble nodrawlineGOUR
  8310.  cmp.w d4,d2
  8311.  ble.s nocliprightGOUR
  8312.  move.w d4,d2
  8313. nocliprightGOUR:
  8314.  move.w (a4),d1
  8315.  cmp.w d4,d1
  8316.  bge nodrawlineGOUR
  8317.  cmp.w d3,d1
  8318.  bge.s noclipleftGOUR
  8319.  move.w d3,d6
  8320.  subq #1,d6
  8321.  sub.w d1,d6
  8322.  move.w d3,d1
  8323. noclipleftGOUR:
  8324.  cmp.w d1,d2
  8325.  ble nodrawlineGOUR
  8326.  
  8327.  move.w d1,leftedge
  8328.  move.w d2,rightedge
  8329.  
  8330.  move.l a2,d2
  8331.  asl.l #2,d2
  8332.  ext.l d0
  8333.  divs.l d0,d2
  8334.  move.l d2,dst
  8335.  asr.l #7,d2
  8336.  asr.l #2,d2
  8337. ; addq #5,d2
  8338. ; add.w lighttype,d2
  8339.  
  8340.  moveq #0,d1
  8341.  moveq #0,d3
  8342.  move.w leftbrighttab-leftsidetab(a4),d1
  8343.  add.w d2,d1
  8344.  bge.s .okbl
  8345.  moveq #0,d1
  8346. .okbl:
  8347. ; asr.w #1,d1
  8348.  cmp.w #31,d1
  8349.  ble.s .okdl
  8350.  move.w #31,d1
  8351. .okdl:
  8352.  
  8353.  move.w rightbrighttab-leftsidetab(a4),d3
  8354.  add.w d2,d3
  8355.  bge.s .okbr
  8356.  moveq #0,d3
  8357. .okbr:
  8358. ; asr.w #1,d3
  8359.  cmp.w #31,d3
  8360.  ble.s .okdr
  8361.  move.w #31,d3
  8362. .okdr:
  8363.  
  8364.  sub.w d1,d3
  8365.  asl.w #8,d1
  8366.  move.w d1,leftbright
  8367.  swap d3
  8368.  tst.l d3
  8369.  bgt.s .OKITSPOSALREADY 
  8370.  neg.l d3
  8371.  asr.l #6,d3
  8372.  divs d5,d3
  8373.  neg.w d3
  8374.  bra.s .OKNOWITSNEG
  8375.  
  8376. .OKITSPOSALREADY
  8377.  asr.l #6,d3
  8378.  divs d5,d3
  8379. .OKNOWITSNEG
  8380.  muls d3,d6
  8381.  add.w #256*4,d6
  8382.  asr.w #2,d6
  8383.  clr.b d6
  8384.  add.w leftbright,d6
  8385.  bge.s .oklbnn
  8386.  moveq #0,d6
  8387. .oklbnn:
  8388.  move.w d6,leftbright
  8389.  
  8390.  ext.l d3
  8391.  asr.l #2,d3
  8392. ; swap d3
  8393. ; asl.w #8,d3
  8394.  move.w d3,brightspd
  8395.  
  8396.  move.l a6,a3
  8397.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8398.  move.l dst,d0
  8399.  lea floorscalecols,a1
  8400.  move.l floortile,a0
  8401.  adda.w whichtile,a0
  8402.  jsr pastfloorbright
  8403.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8404. nodrawlineGOUR
  8405.  
  8406.  sub.w #1,disttobot
  8407.  
  8408.  move.w linedir(pc),d3
  8409.  adda.w d3,a6
  8410. ; ext.l d3
  8411. ; sub.l d3,REFPTR
  8412.  move.w tonextline,d3
  8413.  add.w d3,a4
  8414.  asr.w #1,d3
  8415.  add.w d3,d0
  8416.  subq #1,d7
  8417.  bgt dofloorGOUR
  8418.  
  8419. predontdrawfloorGOUR
  8420.  move.l (a7)+,a0
  8421.  
  8422. dontdrawfloorGOUR:
  8423.  
  8424.  rts
  8425.  
  8426. REFPTR: dc.l 0
  8427.  
  8428. dofloornoclipGOUR:
  8429. ; move.w (a2)+,d0
  8430.  move.w rightsidetab-leftsidetab(a4),d2
  8431.  addq #1,d2
  8432.  move.w (a4),d1
  8433.  move.w d1,leftedge
  8434.  move.w d2,rightedge
  8435.  
  8436.  sub.w d1,d2
  8437.  
  8438.  move.l a2,d6
  8439.  asl.l #2,d6
  8440.  ext.l d0
  8441.  divs.l d0,d6
  8442.  move.l d6,d5
  8443.  asr.l #7,d5
  8444.  asr.l #2,d5
  8445. ; addq #5,d5
  8446. ; add.w lighttype,d5
  8447.  
  8448.  moveq #0,d1
  8449.  moveq #0,d3
  8450.  move.w leftbrighttab-leftsidetab(a4),d1
  8451.  add.w d5,d1
  8452.  bge.s .okbl
  8453.  moveq #0,d1
  8454. .okbl:
  8455. ; asr.w #1,d1
  8456.  cmp.w #31,d1
  8457.  ble.s .okdl
  8458.  move.w #31,d1
  8459. .okdl:
  8460.  
  8461.  move.w rightbrighttab-leftsidetab(a4),d3
  8462.  add.w d5,d3
  8463.  bge.s .okbr
  8464.  moveq #0,d3
  8465. .okbr:
  8466. ; asr.w #1,d3
  8467.  cmp.w #31,d3
  8468.  ble.s .okdr
  8469.  move.w #31,d3
  8470. .okdr:
  8471.  
  8472. ; sub.w d1,d3
  8473. ; asl.w #8,d1
  8474. ; move.l d1,leftbright
  8475. ; swap d3
  8476. ; asr.l #5,d3
  8477. ; divs d2,d3
  8478. ; ext.l d3
  8479. ; asl.l #5,d3
  8480. ; swap d3
  8481. ; asl.w #8,d3
  8482. ; move.l d3,brightspd
  8483.  
  8484.  sub.w d1,d3
  8485.  asl.w #8,d1
  8486.  move.w d1,leftbright
  8487.  swap d3
  8488.  ext.l d2
  8489.  divs.l d2,d3
  8490.  asr.l #8,d3
  8491.  move.w d3,brightspd
  8492.  
  8493.  move.l a6,a3
  8494.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8495.  move.l d6,d0
  8496.  move.l d0,dst
  8497.  lea floorscalecols,a1
  8498.  move.l floortile,a0
  8499.  adda.w whichtile,a0
  8500.  jsr pastfloorbright
  8501.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8502.  sub.w #1,disttobot
  8503.  
  8504.  move.w linedir(pc),d3
  8505.  adda.w d3,a6
  8506. ; ext.l d3
  8507. ; sub.l d3,REFPTR
  8508.  
  8509.  move.w tonextline,d3
  8510.  add.w d3,a4
  8511.  asr.w #1,d3
  8512.  add.w d3,d0
  8513.  subq #1,d7
  8514.  bgt dofloornoclipGOUR
  8515.  
  8516.  bra predontdrawfloorGOUR
  8517.  
  8518.  
  8519.  
  8520. dists:
  8521. ; incbin "floordists"
  8522. drawit: dc.w 0
  8523.  
  8524. LineToUse: dc.l 0
  8525.  
  8526. ***************************
  8527. * Right then, time for the floor
  8528. * routine...
  8529. * For test purposes, give it
  8530. * a3 = point to screen
  8531. * d0= z distance away
  8532. * and sinval+cosval must be set up.
  8533. ***************************
  8534.  
  8535. BLACKFLOOR:
  8536.  moveq #0,d0
  8537.  bra.s DOBLACK
  8538.  
  8539. SimpleFloorLine:
  8540.  
  8541.  CACHE_OFF d2
  8542.  
  8543.  move.l #doacrossline,a1
  8544.  move.w leftedge(pc),d1
  8545.  move.w rightedge(pc),d3
  8546.  sub.w d1,d3
  8547.  lea (a1,d1.w*4),a1
  8548.  move.w (a1,d3.w*4),d4
  8549.  move.w #$4e75,(a1,d3.w*4)
  8550.  
  8551.  tst.b CLRNOFLOOR
  8552.  bne.s BLACKFLOOR
  8553.  
  8554.  move.l #PLAINSCALE,a2
  8555.  
  8556.  move.w d0,d2
  8557.  move.w lighttype,d1
  8558.  asr.w #8,d2
  8559.  add.w #5,d1
  8560.  add.w d2,d1
  8561.  bge.s .fixedbright
  8562.  moveq #0,d1
  8563. .fixedbright:
  8564.  cmp.w #28,d1
  8565.  ble.s .smallbright
  8566.  move.w #28,d1
  8567. .smallbright:
  8568.  lea (a2,d1.w*2),a2
  8569.  
  8570.  move.w whichtile,d0
  8571.  move.w d0,d1
  8572.  and.w #$3,d1
  8573.  and.w #$300,d0
  8574.  lsl.b #6,d1
  8575.  move.b d1,d0
  8576.  move.w d0,tstwhich
  8577.  move.w (a2,d0.w),d0
  8578.  
  8579. DOBLACK:
  8580.  jsr (a1)
  8581.  move.w d4,(a1,d3.w*4)
  8582.  
  8583.  CACHE_ON d2
  8584.  
  8585.  rts
  8586.  
  8587. tstwhich: dc.w 0
  8588. whichtile: dc.w 0
  8589.   
  8590. PLAINSCALE: incbin "ab3:includes/plainscale"
  8591.   
  8592. storeit: dc.l 0
  8593.  
  8594. doacrossline:
  8595. val SET 0
  8596.  REPT 32
  8597.  move.w d0,val(a3)
  8598. val SET val+4
  8599.  ENDR
  8600. val SET val+4
  8601.  REPT 32
  8602.  move.w d0,val(a3)
  8603. val SET val+4
  8604.  ENDR
  8605. val SET val+4
  8606.  REPT 32
  8607.  move.w d0,val(a3)
  8608. val SET val+4
  8609.  ENDR
  8610.  rts
  8611.  
  8612.  
  8613. leftedge: dc.w 0
  8614. rightedge: dc.w 0
  8615.  
  8616. rndpt: dc.l rndtab
  8617.  
  8618.  
  8619. dst: dc.l 0
  8620.  
  8621. FloorLine:
  8622.  
  8623.  move.l floortile,a0
  8624.  adda.w whichtile,a0
  8625.  move.w lighttype,d1
  8626.  move.l d0,dst    ; *4
  8627.  move.l d0,d2    ; *4
  8628. *********************
  8629. * Old version
  8630.  asr.l #2,d2
  8631.  asr.l #8,d2
  8632.  add.w #5,d1
  8633. *********************
  8634. ; asr.w #3,d2
  8635. ; sub.w #4,d2
  8636. ; cmp.w #6,d2
  8637. ; blt.s flbrbr
  8638. ; move.w #6,d2
  8639. ;flbrbr:
  8640. *********************
  8641.  add.w d2,d1
  8642.  bge.s .fixedbright
  8643.  moveq #0,d1
  8644. .fixedbright:
  8645.  cmp.w #28,d1
  8646.  ble.s .smallbright
  8647.  move.w #28,d1
  8648. .smallbright:
  8649.  lea floorscalecols,a1
  8650.  add.l floorbright(pc,d1.w*4),a1
  8651.  bra pastfloorbright
  8652.  
  8653. ConstCol: dc.w 0
  8654.  
  8655. BumpLine:
  8656.  
  8657.  tst.b smoothbumps
  8658.  beq.s Chunky
  8659.  
  8660.  move.l #SmoothTile,a0
  8661.  lea Smoothscalecols,a1
  8662.  bra pastast
  8663.  
  8664. Chunky:
  8665.  
  8666.  moveq #0,d2
  8667.  move.l #Bumptile,a0
  8668.  move.w whichtile,d2
  8669.  adda.w d2,a0
  8670.  ror.l #2,d2
  8671.  lsr.w #6,d2
  8672.  rol.l #2,d2
  8673.  and.w #15,d2
  8674.  move.l #ConstCols,a1
  8675.  move.w (a1,d2.w*2),ConstCol
  8676.  lea Bumpscalecols,a1
  8677.  
  8678. pastast:
  8679.  move.w lighttype,d1
  8680.  
  8681.  move.l d0,dst
  8682.  
  8683.  move.l d0,d2
  8684. *********************
  8685. * Old version
  8686.  asr.l #2,d2
  8687.  asr.l #8,d2
  8688.  add.w #5,d1
  8689. *********************
  8690. ; asr.w #3,d2
  8691. ; sub.w #4,d2
  8692. ; cmp.w #6,d2
  8693. ; blt.s flbrbr
  8694. ; move.w #6,d2
  8695. ;flbrbr:
  8696. *********************
  8697.  add.w d2,d1
  8698.  bge.s .fixedbright
  8699.  moveq #0,d1
  8700. .fixedbright:
  8701.  cmp.w #31,d1
  8702.  ble.s .smallbright
  8703.  move.w #31,d1
  8704. .smallbright:
  8705.  add.l floorbright(pc,d1.w*4),a1
  8706.  bra pastfloorbright
  8707.  
  8708.  
  8709. floorbright:
  8710.  dc.l 512*0
  8711.  dc.l 512*1
  8712.  dc.l 512*2
  8713.  dc.l 512*3
  8714.  dc.l 512*4
  8715.  
  8716.  dc.l 512*5
  8717.  dc.l 512*6
  8718.  dc.l 512*7
  8719.  dc.l 512*8
  8720.  dc.l 512*9
  8721.  
  8722.  dc.l 512*10
  8723.  dc.l 512*11
  8724.  dc.l 512*12
  8725.  dc.l 512*13
  8726.  dc.l 512*14
  8727.  
  8728.  dc.l 512*15
  8729.  dc.l 512*16
  8730.  dc.l 512*17
  8731.  dc.l 512*18
  8732.  dc.l 512*19
  8733.  
  8734.  dc.l 512*20
  8735.  dc.l 512*21
  8736.  dc.l 512*22
  8737.  dc.l 512*23
  8738.  dc.l 512*24
  8739.  
  8740.  dc.l 512*25
  8741.  dc.l 512*26
  8742.  dc.l 512*27
  8743.  dc.l 512*28
  8744.  dc.l 512*29
  8745.  
  8746.  dc.l 512*30
  8747.  dc.l 512*31
  8748.  
  8749. widthleft: dc.w 0
  8750. scaleval: dc.w 0
  8751. sxoff: dc.l 0
  8752. szoff: dc.l 0
  8753. xoff34: dc.w 0
  8754. zoff34: dc.w 0
  8755. scosval: dc.w 0
  8756. ssinval: dc.w 0
  8757.  
  8758.  
  8759. floorsetbright:
  8760.  move.l #walltiles,a0
  8761.  
  8762. pastfloorbright:
  8763.  
  8764.  move.l d0,d1
  8765.  muls cosval,d1    ; change in x across whole width
  8766.  move.l d0,d2
  8767.  muls sinval,d2    ; change in z across whole width
  8768.  neg.l d2
  8769.  asr.l #2,d2
  8770.  asr.l #2,d1
  8771. scaleprog:
  8772.  move.w scaleval(pc),d3
  8773.  beq.s .samescale
  8774.  bgt.s .scaledown
  8775.  neg.w d3
  8776.  asr.l d3,d1
  8777.  asr.l d3,d2
  8778.  bra.s .samescale
  8779. .scaledown:
  8780.  asl.l d3,d1
  8781.  asl.l d3,d2
  8782. .samescale
  8783.  
  8784.  
  8785.  move.l d1,d3 ;    z cos
  8786.  move.l d3,d6
  8787.  move.l d3,d5
  8788.  asr.l #1,d6
  8789.  add.l d6,d3
  8790.  asr.l #1,d3
  8791.  
  8792.  move.l d2,d4    ; z sin
  8793.  move.l d4,d6
  8794.  asr.l #1,d6
  8795.  add.l d4,d6
  8796.  add.l d3,d4
  8797.  neg.l d4    ; start x
  8798.  
  8799.  asr.l #1,d6    ; zsin/2
  8800.  sub.l d6,d5    ; start z
  8801.  
  8802.  add.l sxoff,d4
  8803.  add.l szoff,d5
  8804.  
  8805.  tst.b FULLSCR
  8806.  beq.s .nob
  8807.  
  8808.  moveq #0,d6
  8809.  move.w leftedge(pc),d6
  8810.  beq.s .nomultleftB
  8811.  
  8812.  add.l d6,d6
  8813.  divs #3,d6
  8814.  ext.l d6
  8815.  
  8816.  move.l d1,a4
  8817.  move.l d2,a5
  8818.  
  8819.  muls.l d6,d1
  8820.  asr.l #7,d1
  8821.  add.l d1,d4
  8822.  
  8823.  muls.l d6,d2
  8824.  asr.l #7,d2
  8825.  add.l d2,d5
  8826.  move.l a4,d1
  8827.  move.l a5,d2
  8828.  
  8829.  move.w leftedge(pc),d6
  8830.  
  8831. .nomultleftB:
  8832.  
  8833.  move.w d4,startsmoothx
  8834.  move.w d5,startsmoothz
  8835.  
  8836.  asr.l #8,d4
  8837.  asl.l #8,d5
  8838. ; add.w szoff,d5
  8839. ; add.w sxoff,d4
  8840. ; and.w #63,d4
  8841. ; and.w #63*256,d5
  8842.  
  8843.  move.w d4,d5
  8844.  
  8845.  asr.l #6,d1
  8846.  asr.l #6,d2
  8847.  divs.l #3,d1
  8848.  divs.l #3,d2
  8849.  
  8850.  bra.s doneallmult
  8851.  
  8852. .nob 
  8853.  
  8854.  moveq #0,d6
  8855.  move.w leftedge(pc),d6
  8856.  beq.s nomultleft
  8857.  
  8858.  move.l d1,a4
  8859.  move.l d2,a5
  8860.  
  8861.  muls.l d6,d1
  8862.  asr.l #7,d1
  8863.  add.l d1,d4
  8864.  
  8865.  muls.l d6,d2
  8866.  asr.l #7,d2
  8867.  add.l d2,d5
  8868.  move.l a4,d1
  8869.  move.l a5,d2
  8870.  
  8871.  move.w leftedge(pc),d6
  8872.  
  8873. nomultleft:
  8874.  
  8875.  move.w d4,startsmoothx
  8876.  move.w d5,startsmoothz
  8877.  
  8878.  asr.l #8,d4
  8879.  asl.l #8,d5
  8880. ; add.w szoff,d5
  8881. ; add.w sxoff,d4
  8882. ; and.w #63,d4
  8883. ; and.w #63*256,d5
  8884.  
  8885.  move.w d4,d5
  8886.  
  8887.  asr.l #7,d1
  8888.  asr.l #7,d2
  8889. ; divs.l #3,d1
  8890. ; divs.l #3,d2
  8891.  
  8892. doneallmult:
  8893.  
  8894.  move.w d1,a4
  8895.  move.w d2,a5
  8896.  asl.l #8,d2
  8897. ; and.w #%0011111100000000,d2
  8898.  asr.l #8,d1
  8899.  move.w d1,d2
  8900.  move.l #$3fff3fff,d1
  8901.  and.l d1,d5
  8902. ; swap d5
  8903. ; move.w startsmoothz,d5
  8904. ; swap d5
  8905. ; swap d2
  8906. ; move.w a5,d2
  8907. ; swap d2
  8908.  
  8909. ***********************************
  8910.  
  8911.  tst.b DOUBLEWIDTH
  8912.  beq.s .nodoub
  8913.  
  8914.  and.b #$fe,d6
  8915.  
  8916.  move.w d6,a2
  8917.  moveq #0,d0 
  8918.  move.w rightedge(pc),d3 
  8919.  lea (a3,a2.w),a3 
  8920.  move.w d3,d7
  8921.  sub.w a2,d7
  8922.  asr.w #1,d7
  8923.  move.w startsmoothx,d3
  8924.  
  8925.  tst.b usewater
  8926.  bne texturedwaterDOUB
  8927. ; tst.b gourfloor
  8928.  bra gouraudfloorDOUB
  8929.  
  8930. .nodoub:
  8931.  
  8932.  move.w d6,a2
  8933.  moveq #0,d0 
  8934.  move.w rightedge(pc),d3 
  8935.  lea (a3,a2.w),a3 
  8936.  move.w d3,d7
  8937.  sub.w a2,d7
  8938.  
  8939. intofirststrip:
  8940. allintofirst:
  8941.  
  8942.  move.w startsmoothx,d3
  8943.  
  8944. tstwat:
  8945.  
  8946.  tst.b usewater
  8947.  bne texturedwater
  8948. ; tst.b gourfloor
  8949.  bra gouraudfloor
  8950.  
  8951.  
  8952.  
  8953. ******************************
  8954. * BumpMap the floor/ceiling! *
  8955.  tst.b usebumps
  8956.  bne.s BumpMap
  8957. ******************************
  8958.  
  8959. ordinary:
  8960.  moveq #0,d0
  8961.  
  8962.  dbra d7,acrossscrn
  8963.  rts
  8964.  
  8965. usebumps: dc.w $0
  8966. smoothbumps: dc.w $0
  8967. gourfloor: dc.w 0
  8968.  
  8969.  include "ab3:source_4000/bumpmap.s"
  8970.  
  8971.  CNOP 0,4
  8972. backbefore:
  8973.  and.w d1,d5
  8974.  move.b (a0,d5.w*4),d0
  8975.  add.w a4,d3
  8976.  addx.l d6,d5
  8977.  move.w (a1,d0.w*2),(a3)
  8978.  addq #4,a3
  8979.  dbcs d7,acrossscrn
  8980.  dbcc d7,backbefore
  8981.  bra.s past1
  8982.  
  8983. acrossscrn:
  8984.  and.w d1,d5
  8985.  move.b (a0,d5.w*4),d0
  8986.  add.w a4,d3
  8987.  addx.l d2,d5
  8988.  move.w (a1,d0.w*2),(a3)
  8989.  addq #4,a3
  8990.  dbcs d7,acrossscrn
  8991.  dbcc d7,backbefore
  8992. past1:
  8993.  bcc.s gotoacross
  8994.  
  8995.  move.w d4,d7
  8996.  bne.s .notdoneyet
  8997.  rts
  8998. .notdoneyet:
  8999.  
  9000.  cmp.w #32,d7
  9001.  ble.s .notoowide
  9002.  move.w #32,d7
  9003. .notoowide
  9004.  sub.w d7,d4  
  9005.  addq #4,a3
  9006.  
  9007.  dbra d7,backbefore
  9008.  rts
  9009.  
  9010.  
  9011. gotoacross:
  9012.  
  9013.  move.w d4,d7
  9014.  bne.s .notdoneyet
  9015.  rts
  9016. .notdoneyet:
  9017.  
  9018.  cmp.w #32,d7
  9019.  ble.s .notoowide
  9020.  move.w #32,d7
  9021. .notoowide
  9022.  sub.w d7,d4  
  9023.  addq #4,a3
  9024.  
  9025.  dbra d7,acrossscrn
  9026.  rts
  9027.  
  9028. leftbright: dc.l 0
  9029. brightspd: dc.l 0
  9030.  
  9031. gouraudfloor:
  9032.  
  9033.  move.w leftbright,d0
  9034.  move.l d1,d4
  9035.  move.w brightspd,d1
  9036.  
  9037.  move.w d7,d3
  9038.  asr.w #1,d7
  9039.  btst #0,d3
  9040.  beq.s .nosingle1
  9041.  move.w d5,d3
  9042.  move.l d5,d6
  9043.  lsr.w #8,d3
  9044.  swap d6
  9045.  move.b d3,d6
  9046.  move.w d0,d3
  9047.  move.b (a0,d6.w*4),d3
  9048.  add.w d1,d0
  9049.  add.l d2,d5
  9050.  and.l d4,d5
  9051.  move.b (a1,d3.w*2),(a3)+
  9052. .nosingle1
  9053.  
  9054.  move.w d7,d3
  9055.  asr.w #1,d7
  9056.  btst #0,d3
  9057.  beq.s .nosingle2
  9058.  move.w d5,d3
  9059.  move.l d5,d6
  9060.  lsr.w #8,d3
  9061.  swap d6
  9062.  move.b d3,d6
  9063.  move.w d0,d3
  9064.  move.b (a0,d6.w*4),d3
  9065.  add.w d1,d0
  9066.  add.l d2,d5
  9067.  and.l d4,d5
  9068.  move.l d5,d6
  9069.  swap d6
  9070.  move.b (a1,d3.w*2),(a3)+
  9071.  move.w d5,d3
  9072.  lsr.w #8,d3
  9073.  move.b d3,d6
  9074.  move.w d0,d3
  9075.  move.b (a0,d6.w*4),d3
  9076.  add.w d1,d0
  9077.  add.l d2,d5
  9078.  and.l d4,d5
  9079.  move.b (a1,d3.w*2),(a3)+
  9080.  
  9081. .nosingle2
  9082.  
  9083.  move.l d5,d6
  9084.  swap d6
  9085.  
  9086.  dbra d7,acrossscrngour
  9087.  rts
  9088.  
  9089.  CNOP 0,4
  9090.  
  9091. acrossscrngour:
  9092.  move.w d5,d3
  9093.  lsr.w #8,d3
  9094.  move.b d3,d6
  9095.  move.w d0,d3
  9096.  move.b (a0,d6.w*4),d3
  9097.  add.w d1,d0
  9098.  add.l d2,d5
  9099.  and.l d4,d5
  9100.  move.l d5,d6
  9101.  swap d6
  9102.  move.b (a1,d3.w*2),(a3)+
  9103.  move.w d5,d3
  9104.  lsr.w #8,d3
  9105.  move.b d3,d6
  9106.  move.w d0,d3
  9107.  move.b (a0,d6.w*4),d3
  9108.  add.w d1,d0
  9109.  add.l d2,d5
  9110.  and.l d4,d5
  9111.  move.l d5,d6
  9112.  swap d6
  9113.  move.b (a1,d3.w*2),(a3)+
  9114.  move.w d5,d3
  9115.  lsr.w #8,d3
  9116.  move.b d3,d6
  9117.  move.w d0,d3
  9118.  move.b (a0,d6.w*4),d3
  9119.  add.w d1,d0
  9120.  add.l d2,d5
  9121.  and.l d4,d5
  9122.  move.l d5,d6
  9123.  swap d6
  9124.  move.b (a1,d3.w*2),(a3)+
  9125.  move.w d5,d3
  9126.  lsr.w #8,d3
  9127.  move.b d3,d6
  9128.  move.w d0,d3
  9129.  move.b (a0,d6.w*4),d3
  9130.  add.w d1,d0
  9131.  add.l d2,d5
  9132.  and.l d4,d5
  9133.  move.l d5,d6
  9134.  swap d6
  9135.  move.b (a1,d3.w*2),(a3)+
  9136.  dbra d7,acrossscrngour
  9137.  
  9138.  rts
  9139.  
  9140.  
  9141. gouraudfloorDOUB:
  9142.  
  9143.  move.w leftbright,d0
  9144.  move.l d1,d4
  9145.  move.w brightspd,d1
  9146.  add.w d1,d1
  9147.  add.l d2,d2
  9148.  
  9149.  move.w d7,d3
  9150.  asr.w #1,d7
  9151.  btst #0,d3
  9152.  beq.s .nosingle1
  9153.  move.w d5,d3
  9154.  move.l d5,d6
  9155.  lsr.w #8,d3
  9156.  swap d6
  9157.  move.b d3,d6
  9158.  move.w d0,d3
  9159.  move.b (a0,d6.w*4),d3
  9160.  add.w d1,d0
  9161.  add.l d2,d5
  9162.  and.l d4,d5
  9163.  move.w (a1,d3.w*2),(a3)+
  9164. .nosingle1
  9165.  
  9166.  move.w d7,d3
  9167.  asr.w #1,d7
  9168.  btst #0,d3
  9169.  beq.s .nosingle2
  9170.  move.w d5,d3
  9171.  move.l d5,d6
  9172.  lsr.w #8,d3
  9173.  swap d6
  9174.  move.b d3,d6
  9175.  move.w d0,d3
  9176.  move.b (a0,d6.w*4),d3
  9177.  add.w d1,d0
  9178.  add.l d2,d5
  9179.  and.l d4,d5
  9180.  move.l d5,d6
  9181.  swap d6
  9182.  move.w (a1,d3.w*2),(a3)+
  9183.  move.w d5,d3
  9184.  lsr.w #8,d3
  9185.  move.b d3,d6
  9186.  move.w d0,d3
  9187.  move.b (a0,d6.w*4),d3
  9188.  add.w d1,d0
  9189.  add.l d2,d5
  9190.  and.l d4,d5
  9191.  move.w (a1,d3.w*2),(a3)+
  9192.  
  9193. .nosingle2
  9194.  
  9195.  move.l d5,d6
  9196.  swap d6
  9197.  
  9198.  dbra d7,acrossscrngourD
  9199.  rts
  9200.  
  9201.  CNOP 0,4
  9202.  
  9203. acrossscrngourD:
  9204.  move.w d5,d3
  9205.  lsr.w #8,d3
  9206.  move.b d3,d6
  9207.  move.w d0,d3
  9208.  move.b (a0,d6.w*4),d3
  9209.  add.w d1,d0
  9210.  add.l d2,d5
  9211.  and.l d4,d5
  9212.  move.l d5,d6
  9213.  swap d6
  9214.  move.w (a1,d3.w*2),(a3)+
  9215.  move.w d5,d3
  9216.  lsr.w #8,d3
  9217.  move.b d3,d6
  9218.  move.w d0,d3
  9219.  move.b (a0,d6.w*4),d3
  9220.  add.w d1,d0
  9221.  add.l d2,d5
  9222.  and.l d4,d5
  9223.  move.l d5,d6
  9224.  swap d6
  9225.  move.w (a1,d3.w*2),(a3)+
  9226.  move.w d5,d3
  9227.  lsr.w #8,d3
  9228.  move.b d3,d6
  9229.  move.w d0,d3
  9230.  move.b (a0,d6.w*4),d3
  9231.  add.w d1,d0
  9232.  add.l d2,d5
  9233.  and.l d4,d5
  9234.  move.l d5,d6
  9235.  swap d6
  9236.  move.w (a1,d3.w*2),(a3)+
  9237.  move.w d5,d3
  9238.  lsr.w #8,d3
  9239.  move.b d3,d6
  9240.  move.w d0,d3
  9241.  move.b (a0,d6.w*4),d3
  9242.  add.w d1,d0
  9243.  add.l d2,d5
  9244.  and.l d4,d5
  9245.  move.l d5,d6
  9246.  swap d6
  9247.  move.w (a1,d3.w*2),(a3)+
  9248.  dbra d7,acrossscrngourD
  9249.  
  9250.  rts
  9251.  
  9252.  
  9253. ;backbeforegour:
  9254. ; and.w #63*256+63,d5
  9255. ; move.b (a0,d5.w*4),d0
  9256. ; add.l d1,d0
  9257. ; bcc.s .nomoreb
  9258. ; add.w #256,d0
  9259. ;.nomoreb:
  9260. ; add.w a4,d3
  9261. ; move.w (a1,d0.w*2),(a3)+
  9262. ; addx.l d6,d5
  9263. ; dbcs d7,acrossscrngour
  9264. ; dbcc d7,backbeforegour
  9265. ; rts
  9266. ; bra.s past1gour
  9267.  
  9268. ;acrossscrngour:
  9269. ; and.l #$3f3f,d5 
  9270. ; move.b (a0,d5.w*4),d0
  9271. ; add.l d1,d0
  9272. ; bcc.s .nomoreb
  9273. ; add.w #256,d0
  9274. ;.nomoreb:
  9275. ; add.w a4,d3
  9276. ; move.w (a1,d0.w*2),(a3)+
  9277. ; addx.l d2,d5
  9278. ; dbcs d7,acrossscrngour
  9279. ; dbcc d7,backbeforegour
  9280. ;past1gour:
  9281. ; rts
  9282.  
  9283.  move.w d4,d7
  9284.  bne.s .notdoneyet
  9285.  move.l d0,leftbright
  9286.  
  9287.  rts
  9288. .notdoneyet:
  9289.  
  9290.  cmp.w #32,d7
  9291.  ble.s .notoowide
  9292.  move.w #32,d7
  9293. .notoowide
  9294.  sub.w d7,d4  
  9295.  addq #4,a3
  9296.  
  9297. ; dbra d7,backbeforegour
  9298.  rts
  9299.  
  9300.  
  9301. gotoacrossgour:
  9302.  
  9303.  move.w d4,d7
  9304.  bne.s .notdoneyet
  9305.  rts
  9306. .notdoneyet:
  9307.  
  9308.  cmp.w #32,d7
  9309.  ble.s .notoowide
  9310.  move.w #32,d7
  9311. .notoowide
  9312.  sub.w d7,d4  
  9313.  addq #4,a3
  9314.  
  9315.  dbra d7,acrossscrngour
  9316.  rts
  9317.  
  9318.  
  9319. waterpt: dc.l waterlist
  9320.  
  9321. waterlist:
  9322.  dc.l waterfile
  9323.  dc.l waterfile+2
  9324.  dc.l waterfile+256
  9325.  dc.l waterfile+256+2
  9326.  dc.l waterfile+512
  9327.  dc.l waterfile+512+2
  9328.  dc.l waterfile+768
  9329.  dc.l waterfile+768+2
  9330. ; dc.l waterfile+768
  9331. ; dc.l waterfile+512+2
  9332. ; dc.l waterfile+512
  9333. ; dc.l waterfile+256+2
  9334. ; dc.l waterfile+256
  9335. ; dc.l waterfile+2
  9336. endwaterlist:
  9337.  
  9338. watertouse: dc.l waterfile
  9339.  
  9340. wtan: dc.w 0
  9341. wateroff: dc.l 0
  9342.  
  9343. REFLECTIONWATER:
  9344.  
  9345.  move.l d1,d4
  9346.  
  9347.  add.l wateroff,d5
  9348.  
  9349.  move.l #brightentab,a1
  9350.  move.l dst,d0
  9351.  clr.b d0
  9352.  
  9353.  add.w d0,d0
  9354.  cmp.w #12*512,d0
  9355.  blt.s .notoowater
  9356.  move.w #12*512,d0
  9357.  
  9358. .notoowater:
  9359.   
  9360.  adda.w d0,a1
  9361.  
  9362.  move.l dst,d0
  9363.  asl.w #7,d0
  9364.  add.w wtan,d0
  9365.  and.w #8191,d0
  9366.  move.l #SineTable,a0
  9367.  move.w (a0,d0.w),d0
  9368.  ext.l d0
  9369.  
  9370.  move.l dst,d3
  9371.  add.w #300,d3
  9372.  divs d3,d0
  9373.  asr.w #5,d0
  9374.  addq #4,d0
  9375.  cmp.w disttobot,d0
  9376.  blt.s oknotoffbotototr
  9377.  
  9378.  move.w disttobot,d0
  9379.  subq #1,d0
  9380.  
  9381. oknotoffbotototr
  9382.  
  9383. ; move.w dst,d3
  9384. ; asr.w #7,d3
  9385. ; add.w d3,d0
  9386.  
  9387.  muls #320,d0
  9388.  tst.w above
  9389.  beq.s nonnnnnegr
  9390.  neg.l d0
  9391.  
  9392. nonnnnnegr:
  9393.  
  9394.  move.l d0,a6
  9395.  
  9396.  move.l watertouse,a0
  9397.  
  9398. ; move.l #mixtab,a5
  9399.  
  9400.  moveq #0,d1
  9401.  
  9402.  move.w startsmoothx,d3
  9403.  dbra d7,acrossscrnwr
  9404.  rts
  9405.  
  9406. backbeforewr:
  9407.  and.w d1,d5 
  9408.  move.w (a0,d5.w*4),d0
  9409.  move.b (a3,a6.w),d0
  9410.  move.w (a1,d0.w*2),(a3)+
  9411.  add.w a4,d3
  9412.  addx.l d6,d5
  9413.  dbcs d7,acrossscrnwr
  9414.  dbcc d7,backbeforewr
  9415.  rts
  9416.  
  9417. acrossscrnwr:
  9418.  move.w d5,d3
  9419.  move.l d5,d6
  9420.  lsr.w #8,d3
  9421.  swap d6
  9422.  move.b d3,d6
  9423.  move.w (a0,d6.w*4),d0
  9424.  add.l d2,d5
  9425.  move.w (a4,a6.w),d1
  9426.  addq #2,a4
  9427.  move.b (a3,a6.w),d1
  9428.  move.b (a5,d1.l),d0
  9429.  and.l d4,d5
  9430.  move.w (a1,d0.w*2),(a3)+
  9431.  dbra d7,acrossscrnwr
  9432.  rts
  9433.  
  9434. texturedwater:
  9435.  
  9436.  move.l d1,d4
  9437.  
  9438.  add.l wateroff,d5
  9439.  
  9440.  move.l #brightentab,a1
  9441.  move.l dst,d0
  9442.  clr.b d0
  9443.  
  9444.  add.w d0,d0
  9445.  cmp.w #11*512,d0
  9446.  blt.s .notoowater
  9447.  move.w #11*512,d0
  9448. .notoowater:
  9449.   
  9450.  adda.w d0,a1
  9451.  
  9452.  move.l dst,d0
  9453.  asl.w #7,d0
  9454.  add.w wtan,d0
  9455.  and.w #8191,d0
  9456.  move.l #SineTable,a0
  9457.  move.w (a0,d0.w),d0
  9458.  ext.l d0
  9459.  
  9460.  move.l dst,d3
  9461.  add.w #300,d3
  9462.  divs d3,d0
  9463.  asr.w #5,d0
  9464.  addq #4,d0
  9465.  cmp.w disttobot,d0
  9466.  blt.s oknotoffbototot
  9467.  
  9468.  move.w disttobot,d0
  9469.  subq #1,d0
  9470.  
  9471. oknotoffbototot
  9472.  
  9473. ; move.w dst,d3
  9474. ; asr.w #7,d3
  9475. ; add.w d3,d0
  9476.  
  9477.  tst.b DOUBLEHEIGHT
  9478.  beq.s .nodoub
  9479.  and.b #$fe,d0
  9480. .nodoub:
  9481.  
  9482.  muls #320,d0
  9483.  tst.w above
  9484.  beq.s nonnnnneg
  9485.  neg.l d0
  9486.  
  9487. nonnnnneg:
  9488.  
  9489.  move.l d0,a6
  9490.  
  9491.  move.l watertouse,a0
  9492.  
  9493.  move.w startsmoothx,d3
  9494.  dbra d7,acrossscrnw
  9495.  rts
  9496.  
  9497. backbeforew:
  9498.  and.w d1,d5
  9499.  move.w (a0,d5.w*4),d0
  9500.  move.b (a3,a6.w),d0
  9501.  move.b (a1,d0.w*2),(a3)+
  9502.  add.w a4,d3
  9503.  addx.l d6,d5
  9504.  dbcs d7,acrossscrnw
  9505.  dbcc d7,backbeforew
  9506.  rts
  9507.  
  9508. acrossscrnw:
  9509.  move.w d5,d3
  9510.  move.l d5,d6
  9511.  lsr.w #8,d3
  9512.  swap d6
  9513.  move.b d3,d6
  9514.  move.w (a0,d6.w*4),d0
  9515.  add.l d2,d5
  9516.  move.b (a3,a6.w),d0
  9517.  and.l d4,d5
  9518.  move.b (a1,d0.w*2),(a3)+
  9519.  dbra d7,acrossscrnw
  9520.  rts
  9521.  
  9522.  
  9523. texturedwaterDOUB:
  9524.  
  9525.  move.l d1,d4
  9526.  
  9527.  add.l wateroff,d5
  9528.  
  9529.  move.l #brightentab,a1
  9530.  move.l dst,d0
  9531.  clr.b d0
  9532.  
  9533.  add.w d0,d0
  9534.  cmp.w #11*512,d0
  9535.  blt.s .notoowater
  9536.  move.w #11*512,d0
  9537. .notoowater:
  9538.   
  9539.  adda.w d0,a1
  9540.  
  9541.  move.l dst,d0
  9542.  asl.w #7,d0
  9543.  add.w wtan,d0
  9544.  and.w #8191,d0
  9545.  move.l #SineTable,a0
  9546.  move.w (a0,d0.w),d0
  9547.  ext.l d0
  9548.  
  9549.  move.l dst,d3
  9550.  add.w #300,d3
  9551.  divs d3,d0
  9552.  asr.w #5,d0
  9553.  addq #4,d0
  9554.  cmp.w disttobot,d0
  9555.  blt.s .oknotoffbototot
  9556.  
  9557.  move.w disttobot,d0
  9558.  subq #1,d0
  9559.  
  9560. .oknotoffbototot
  9561.  
  9562. ; move.w dst,d3
  9563. ; asr.w #7,d3
  9564. ; add.w d3,d0
  9565.  
  9566.  tst.b DOUBLEHEIGHT
  9567.  beq.s .nodoub
  9568.  and.b #$fe,d0
  9569. .nodoub:
  9570.  
  9571.  muls #320,d0
  9572.  tst.w above
  9573.  beq.s .nonnnnneg
  9574.  neg.l d0
  9575.  
  9576. .nonnnnneg:
  9577.  
  9578.  move.l d0,a6
  9579.  
  9580.  move.l watertouse,a0
  9581.  
  9582.  add.l d2,d2
  9583.  
  9584.  move.w startsmoothx,d3
  9585.  dbra d7,acrossscrnwD
  9586.  rts
  9587.  
  9588.  
  9589. acrossscrnwD:
  9590.  move.w d5,d3
  9591.  move.l d5,d6
  9592.  lsr.w #8,d3
  9593.  swap d6
  9594.  move.b d3,d6
  9595.  move.w (a0,d6.w*4),d0
  9596.  add.l d2,d5
  9597.  move.b (a3,a6.w),d0
  9598.  and.l d4,d5
  9599.  move.w (a1,d0.w*2),(a3)+
  9600.  dbra d7,acrossscrnwD
  9601.  rts
  9602.  
  9603.  
  9604. usewater: dc.w 0
  9605.  dc.w 0
  9606. startsmoothx: dc.w 0
  9607.  dc.w 0
  9608. startsmoothz: dc.w 0
  9609.  
  9610. ********************************
  9611. *
  9612.  include "AB3:source_4000/ObjDrawHIRES.s"
  9613. *
  9614. ********************************
  9615.  
  9616. numframes:
  9617.  dc.w 0
  9618.  
  9619. alframe: dc.l 0
  9620.  
  9621. alan:
  9622.  dcb.l 8,0
  9623.  dcb.l 8,1
  9624.  dcb.l 8,2
  9625.  dcb.l 8,3
  9626. endalan:
  9627.  
  9628. alanptr: dc.l alan
  9629.  
  9630. Time2: dc.l 0
  9631. dispco:
  9632.  dc.w 0
  9633.  
  9634.  
  9635. key_interrupt:
  9636.         movem.l    d0-d7/a0-a6,-(sp)
  9637.  
  9638. ;        move.w    INTREQR,d0
  9639. ;        btst    #3,d0
  9640. ;        beq    .not_key
  9641.  
  9642.         move.b    $bfdd00,d0
  9643.         btst    #0,d0
  9644.         bne    .key_cont
  9645. ;        move.b    $bfed01,d0
  9646. ;        btst    #0,d0
  9647. ;        bne    .key_cont
  9648.     
  9649. ;        btst    #3,d0
  9650. ;        beq    .key_cont
  9651.  
  9652.         move.b    $bfec01,d0
  9653.         clr.b    $bfec01
  9654.  
  9655.         tst.b    d0
  9656.         beq    .key_cont
  9657.  
  9658. ;        bset    #6,$bfee01
  9659. ;        move.b    #$f0,$bfe401
  9660. ;        move.b    #$00,$bfe501
  9661. ;        bset    #0,$bfee01
  9662.  
  9663.  
  9664.         not.b    d0
  9665.         ror.b    #1,d0
  9666.         lea.l    KeyMap,a0
  9667.         tst.b    d0
  9668.         bmi.b    .key_up
  9669.         and.w    #$7f,d0
  9670. ;        add.w    #1,d0
  9671.         move.b    #$ff,(a0,d0.w)
  9672.         move.b    d0,lastpressed
  9673.  
  9674.         bra.b    .key_cont2
  9675. .key_up:
  9676.         and.w    #$7f,d0
  9677. ;        add.w    #1,d0
  9678.         move.b    #$00,(a0,d0.w)
  9679.  
  9680. .key_cont2
  9681. ;        btst    #0,$bfed01
  9682. ;        beq    .key_cont2
  9683. ;        move.b    #%00000000,$bfee01
  9684. ;        move.b    #%10001000,$bfed01
  9685.  
  9686. ;alt keys should not be independent so overlay ralt on lalt
  9687.  
  9688.         
  9689. .key_cont
  9690.  
  9691. ;        move.w    #$0008,INTREQ
  9692. .not_key:    ;lea.l    $dff000,a5
  9693.  
  9694. ;        lea.l    _keypressed(pc),a0
  9695. ;        move.b    101(a0),d0    ;read LALT
  9696. ;        or.b    102(a0),d0    ;blend it with RALT
  9697. ;        move.b    d0,127(a0)    ;save in combined position
  9698.  
  9699.         movem.l    (sp)+,d0-d7/a0-a6
  9700.  
  9701.         rts
  9702.  
  9703. lastpressed:    dc.b 0
  9704. KInt_CCode    Ds.b    1
  9705. KInt_Askey    Ds.b    1
  9706. KInt_OCode    Ds.w    1
  9707.  
  9708.  
  9709. OldSpace: dc.b 0
  9710. SpaceTapped: dc.b 0
  9711. PLR1_SPCTAP: dc.b 0
  9712. PLR2_SPCTAP: dc.b 0
  9713. PLR1_Ducked: dc.b 0
  9714. PLR2_Ducked: dc.b 0
  9715.  even
  9716.  
  9717.  include "ab3:source_4000/PLR1CONTROL.s"
  9718.  include "ab3:source_4000/PLR2CONTROL.s"
  9719.  include "ab3:source_4000/FALL.s"
  9720.  
  9721. prot7: dc.w 0
  9722.  
  9723. GOTTOSEND: dc.w 0
  9724.  
  9725. OtherInter:
  9726.  move.w #$0010,$dff000+intreq
  9727.  movem.l d0-d7/a0-a6,-(a7)
  9728.  bra justshake
  9729.  
  9730.     cnop 0,4
  9731.  
  9732. Chan0inter:
  9733.  
  9734.     SAVEREGS
  9735.     jsr    .routine
  9736.     GETREGS
  9737.  
  9738. ;    move.w    #1024+'.',$dff030
  9739.     
  9740.     moveq #0,d0
  9741.     rts
  9742.  
  9743. .routine
  9744.  
  9745.     
  9746. ;w move.w #$0010,$dff000+intreq
  9747.  
  9748.  tst.b doanything
  9749.  bne dosomething
  9750.  
  9751.  movem.l d0-d7/a0-a6,-(a7)
  9752.  bra JUSTSOUNDS
  9753.  
  9754.  rts
  9755.  
  9756. tabheld: dc.w 0
  9757. ObjWork: ds.l 512
  9758. WORKPTR: dc.l 0
  9759. thistime: dc.w 0
  9760.  
  9761. DOALLANIMS:
  9762.  
  9763.  sub.b #1,thistime
  9764.  ble.s .okdosome
  9765.  rts
  9766.  
  9767. .okdosome:
  9768.  move.b #5,thistime
  9769.  
  9770.  
  9771.  move.l #ObjWork,a5
  9772.  move.l ObjectData,a0
  9773. Objectloop2:
  9774.  tst.w (a0)
  9775.  blt doneallobj2
  9776.  move.w 12(a0),d0
  9777.  blt doneobj2
  9778.  move.w d0,GraphicRoom(a0)
  9779.  tst.b worry(a0)
  9780.  beq.s doneobj2
  9781.  
  9782.  move.b 16(a0),d0
  9783.  cmp.b #1,d0
  9784.  blt JUMPALIENANIM
  9785.  beq JUMPOBJECTANIM
  9786. ; cmp.b #2,d0
  9787. ; beq JUMPBULLET
  9788.  
  9789. doneobj2:
  9790.  
  9791.  adda.w #64,a0
  9792.  addq #8,a5
  9793.  bra Objectloop2
  9794.  
  9795. doneallobj2:
  9796.  rts
  9797.  
  9798. JUMPALIENANIM:
  9799.  
  9800.  moveq #0,d0
  9801.  move.b WhichAnim(a0),d0
  9802. ; 0=walking
  9803. ; 1=attacking
  9804. ; 2=getting hit
  9805. ; 3=dying
  9806.  
  9807.  cmp.b #1,d0
  9808.  blt.s ALWALK
  9809.  beq.s ALATTACK
  9810.  
  9811.  cmp.b #3,d0
  9812.  blt ALGETHIT
  9813.  beq ALDIE
  9814.  
  9815.  bra doneobj2
  9816.  
  9817. ALDIE
  9818.  move.l #10,d0
  9819.  bra intowalk
  9820.  
  9821. ALGETHIT:
  9822.  move.l #9,d0
  9823.  bra intowalk
  9824.  
  9825. ALATTACK:
  9826.  move.l #8,d0
  9827.  bra intowalk
  9828.  
  9829. AUXOBJ: dc.w 0
  9830.  
  9831. ALWALK:
  9832.  
  9833.  jsr ViewpointToDraw
  9834.  add.l d0,d0
  9835.  
  9836.  move.l LINKFILE,a6
  9837.  add.l #AlienStats,a6
  9838.  moveq #0,d1
  9839.  move.b TypeOfThing(a0),d1
  9840.  muls #AlienStatLen,d1
  9841.  add.l d1,a6
  9842.  cmp.w #1,A_GFXType(a6)
  9843.  bne.s NOSIDES2
  9844.  
  9845.  moveq #0,d0
  9846. intowalk:
  9847.  
  9848. NOSIDES2:
  9849.  
  9850.  move.b d0,2(a5)
  9851.  move.l LINKFILE,a6
  9852.  
  9853.  add.l #AlienAnimData,a6
  9854.  
  9855.  moveq #0,d1
  9856.  move.b TypeOfThing(a0),d1
  9857.  muls #A_AnimLen,d1
  9858.  add.l d1,a6
  9859.  
  9860. ; move.l ANIMPOINTER,a6
  9861.  
  9862.  muls #A_OptLen,d0
  9863.  add.w d0,a6
  9864.  
  9865.  move.w SecTimer(a0),d1
  9866.  move.w d1,d2
  9867.  muls #A_FrameLen,d1
  9868.  
  9869.  moveq #0,d0
  9870.  move.b 5(a6,d1.w),d0
  9871.  beq.s .nosoundmake
  9872.  
  9873.  movem.l d0-d7/a0-a6,-(a7)
  9874.  subq #1,d0
  9875.  move.w d0,Samplenum
  9876.  clr.b notifplaying
  9877.  move.b 1(a0),IDNUM
  9878.  move.w #80,Noisevol
  9879.  move.l #ObjRotated,a1
  9880.  move.w (a0),d0
  9881.  lea (a1,d0.w*8),a1
  9882.  move.l (a1),Noisex
  9883.  jsr MakeSomeNoise
  9884.  movem.l (a7)+,d0-d7/a0-a6
  9885. .nosoundmake
  9886.  
  9887.  move.b 6(a6,d1.w),d0
  9888.  beq.s .noaction
  9889.  add.b #1,(a5)
  9890.  move.b d2,1(a5)
  9891. .noaction
  9892.  
  9893.  addq #1,d2
  9894.  
  9895.  moveq #0,d0
  9896.  move.b 7(a6,d1.w),d0
  9897.  beq.s .nospecial
  9898.  
  9899.  move.b d0,d3
  9900.  and.w #63,d3
  9901.  lsr.w #6,d0
  9902.  cmp.w #2,d0
  9903.  blt.s .storeval
  9904.  beq.s .randval
  9905.  
  9906.  sub.b #1,4(a5)
  9907.  beq.s .nospecial
  9908.  
  9909.  move.w d3,d2
  9910.  bra.s .nospecial
  9911.  
  9912. .randval:
  9913.  jsr GetRand
  9914.  divs d3,d0
  9915.  swap d0
  9916.  move.w d0,d3
  9917.  
  9918. .storeval:
  9919.  move.b d3,4(a5)
  9920. .nospecial:
  9921.  
  9922.  move.w d2,d3
  9923.  muls #A_FrameLen,d3
  9924.  tst.b (a6,d3.w)
  9925.  bge.s .noendanim
  9926.  st 3(a5)
  9927.  move.w #0,d2
  9928. .noendanim
  9929.  move.w d2,SecTimer(a0)
  9930.  
  9931.  bra doneobj2
  9932.  
  9933.  
  9934. JUMPOBJECTANIM:
  9935.  bra doneobj2
  9936.  
  9937.  
  9938. dosomething:
  9939.  
  9940.  
  9941.  addq.w #1,FramesToDraw
  9942.  movem.l d0-d7/a0-a6,-(a7)
  9943.  jsr NARRATOR
  9944.  
  9945.  bsr DOALLANIMS
  9946.  
  9947.  move.l #KeyMap,a5
  9948.  
  9949.  tst.b $42(a5)
  9950.  bne.s .tabprsd
  9951.  clr.b tabheld
  9952.  bra.s .noswitch
  9953.  
  9954. .tabprsd:
  9955.  tst.b tabheld
  9956.  bne.s .noswitch
  9957.  not.b MAPON
  9958.  st tabheld
  9959. .noswitch
  9960.  
  9961.  tst.b $3e(a5)
  9962.  sne d0
  9963.  tst.b $1e(a5)
  9964.  sne d1
  9965.  tst.b $2d(a5)
  9966.  sne d2
  9967.  tst.b $2f(a5)
  9968.  sne d3
  9969.  
  9970.  tst.b $3d(a5)
  9971.  sne d4
  9972.  tst.b $3f(a5)
  9973.  sne d5
  9974.  tst.b $1d(a5)
  9975.  sne d6
  9976.  tst.b $1f(a5)
  9977.  sne d7
  9978.  
  9979.  or.b d4,d0
  9980.  or.b d5,d0
  9981.  or.b d6,d1
  9982.  or.b d7,d1
  9983.  or.b d4,d2
  9984.  or.b d6,d2
  9985.  or.b d7,d3
  9986.  or.b d5,d3
  9987.  
  9988.  move.w MAPBRIGHT,d4
  9989.  add.w #2,d4
  9990.  clr.l d5
  9991.  bset d4,d5
  9992.  
  9993.  tst.b d0
  9994.  beq.s .nomapup
  9995.  sub.w d5,mapzoff
  9996. .nomapup 
  9997.  
  9998.  tst.b d1
  9999.  beq.s .nomapdown
  10000.  add.w d5,mapzoff
  10001. .nomapdown 
  10002.  
  10003.  tst.b d2
  10004.  beq.s .nomapleft
  10005.  add.w d5,mapxoff
  10006. .nomapleft 
  10007.  
  10008.  tst.b d3
  10009.  beq.s .nomapright
  10010.  sub.w d5,mapxoff
  10011. .nomapright 
  10012.  
  10013.  tst.b $2e(a5)
  10014.  beq.s .nomapcentre
  10015.  
  10016.  move.w #0,mapxoff
  10017.  move.w #0,mapzoff
  10018.  
  10019. .nomapcentre
  10020.  
  10021. ; move.w STOPOFFSET,d0
  10022. ; tst.b 27(a5)
  10023. ; beq.s .nolookup
  10024. ; sub.w #5,d0
  10025. ; cmp.w #-80,d0
  10026. ; bgt.s .nolookup
  10027. ; move.w #-80,d0
  10028. ;.nolookup:
  10029. ; tst.b 42(a5)
  10030. ; beq.s .nolookdown
  10031. ; add.w #5,d0
  10032. ; cmp.w #80,d0
  10033. ; blt.s .nolookdown
  10034. ; move.w #80,d0
  10035. ;.nolookdown:
  10036. ;
  10037. ; move.w d0,STOPOFFSET
  10038. ; neg.w d0
  10039. ; add.w #120,d0
  10040. ; move.w d0,SMIDDLEY
  10041. ; muls #320*2,d0
  10042. ; move.l d0,SBIGMIDDLEY
  10043.  
  10044.  
  10045.  
  10046. ; jsr INITREC
  10047. ; jsr RECEIVE
  10048.  
  10049. ; tst.l BUFFER
  10050. ; beq.s justshake
  10051. ; st GOTTOSEND
  10052. ; move.l #OtherInter,$6c
  10053.  
  10054. justshake:
  10055.  
  10056.  cmp.b #'b',Prefsfile+3
  10057.  bne.s .noback
  10058.  jsr mt_music
  10059. .noback:
  10060.  
  10061.  bra dontshowtime
  10062.  
  10063.  tst.b oktodisplay
  10064.  beq dontshowtime
  10065.  clr.b oktodisplay
  10066.  subq.w #1,dispco
  10067.  bgt dontshowtime
  10068.  move.w #10,dispco
  10069.  
  10070.  move.l #TimerScr+10,a0
  10071.  move.l TimeCount,d0
  10072.  bge.s timenotneg
  10073.  move.l #1111*256,d0
  10074. timenotneg:
  10075.  asr.l #8,d0
  10076.  move.l #digits,a1
  10077.  move.w #7,d2
  10078. digitlop
  10079.  divs #10,d0
  10080.  swap d0
  10081.  lea (a1,d0.w*8),a2
  10082.  move.b (a2)+,(a0)
  10083.  move.b (a2)+,24(a0)
  10084.  move.b (a2)+,24*2(a0)
  10085.  move.b (a2)+,24*3(a0)
  10086.  move.b (a2)+,24*4(a0)
  10087.  move.b (a2)+,24*5(a0)
  10088.  move.b (a2)+,24*6(a0)
  10089.  move.b (a2)+,24*7(a0)
  10090.  subq #1,a0
  10091.  swap d0
  10092.  ext.l d0
  10093.  dbra d2,digitlop
  10094.  
  10095.  move.l #TimerScr+10+24*10,a0
  10096.  move.l NumTimes,d0
  10097.  move.l #digits,a1
  10098.  move.w #3,d2
  10099. digitlop2
  10100.  divs #10,d0
  10101.  swap d0
  10102.  lea (a1,d0.w*8),a2
  10103.  move.b (a2)+,(a0)
  10104.  move.b (a2)+,24(a0)
  10105.  move.b (a2)+,24*2(a0)
  10106.  move.b (a2)+,24*3(a0)
  10107.  move.b (a2)+,24*4(a0)
  10108.  move.b (a2)+,24*5(a0)
  10109.  move.b (a2)+,24*6(a0)
  10110.  move.b (a2)+,24*7(a0)
  10111.  subq #1,a0
  10112.  swap d0
  10113.  ext.l d0
  10114.  dbra d2,digitlop2
  10115.  
  10116.  move.l #TimerScr+10+24*20,a0
  10117.  moveq #0,d0
  10118.  move.w FramesToDraw,d0
  10119.  move.l #digits,a1
  10120.  move.w #2,d2
  10121. digitlop3
  10122.  divs #10,d0
  10123.  swap d0
  10124.  lea (a1,d0.w*8),a2
  10125.  move.b (a2)+,(a0)
  10126.  move.b (a2)+,24(a0)
  10127.  move.b (a2)+,24*2(a0)
  10128.  move.b (a2)+,24*3(a0)
  10129.  move.b (a2)+,24*4(a0)
  10130.  move.b (a2)+,24*5(a0)
  10131.  move.b (a2)+,24*6(a0)
  10132.  move.b (a2)+,24*7(a0)
  10133.  subq #1,a0
  10134.  swap d0
  10135.  ext.l d0
  10136.  dbra d2,digitlop3
  10137.  
  10138. dontshowtime:
  10139.  
  10140.  
  10141.  move.l alanptr,a0
  10142.  move.l (a0)+,alframe
  10143.  cmp.l #endalan,a0
  10144.  blt.s nostartalan
  10145.  move.l #alan,a0
  10146. nostartalan:
  10147.  move.l a0,alanptr
  10148.  
  10149.  
  10150.  tst.b READCONTROLS
  10151.  beq.s nocontrols
  10152.  
  10153.  cmp.b #'s',mors
  10154.  beq.s control2
  10155.  
  10156.  tst.b PLR1MOUSE
  10157.  beq.s PLR1_nomouse
  10158.  bsr PLR1_mouse_control
  10159. PLR1_nomouse:
  10160.  tst.b PLR1KEYS
  10161.  beq.s PLR1_nokeys
  10162.  bsr PLR1_keyboard_control
  10163. PLR1_nokeys:
  10164. ; tst.b PLR1PATH
  10165. ; beq.s PLR1_nopath
  10166. ; bsr PLR1_follow_path
  10167. ;PLR1_nopath:
  10168.  tst.b PLR1JOY
  10169.  beq.s PLR1_nojoy
  10170.  bsr PLR1_JoyStick_control
  10171. PLR1_nojoy: 
  10172.  bra.s nocontrols
  10173.  
  10174. control2:
  10175.  tst.b PLR2MOUSE
  10176.  beq.s PLR2_nomouse
  10177.  bsr PLR2_mouse_control
  10178. PLR2_nomouse:
  10179.  tst.b PLR2KEYS
  10180.  beq.s PLR2_nokeys
  10181.  bsr PLR2_keyboard_control
  10182. PLR2_nokeys:
  10183. ; tst.b PLR2PATH
  10184. ; beq.s PLR2_nopath
  10185. ; bsr PLR1_follow_path
  10186. ;PLR2_nopath:
  10187.  tst.b PLR2JOY
  10188.  beq.s PLR2_nojoy
  10189.  bsr PLR2_JoyStick_control
  10190. PLR2_nojoy: 
  10191.  
  10192.  
  10193. nocontrols:
  10194.  
  10195.  move.l #$dff000,a6
  10196.  
  10197.  cmp.b #'4',Prefsfile+1
  10198.  bne.s nomuckabout
  10199.  
  10200.  move.w #$0,d0 
  10201.  tst.b NoiseMade0LEFT
  10202.  beq.s noturnoff0
  10203.  move.w #1,d0
  10204. noturnoff0:
  10205.  tst.b NoiseMade0RIGHT
  10206.  beq.s noturnoff1
  10207.  or.w #2,d0
  10208. noturnoff1:
  10209.  tst.b NoiseMade1RIGHT
  10210.  beq.s noturnoff2
  10211.  or.w #4,d0
  10212. noturnoff2:
  10213.  tst.b NoiseMade1LEFT
  10214.  beq.s noturnoff3
  10215.  or.w #8,d0
  10216. noturnoff3:
  10217.     move.w d0,dmacon(a6)
  10218.  
  10219. nomuckabout:
  10220.  
  10221.  
  10222. ; tst.b PLR2_fire
  10223. ; beq.s firenotpressed2
  10224. ; fire was pressed last time.
  10225. ; btst #7,$bfe001
  10226. ; bne.s firenownotpressed2
  10227. ; fire is still pressed this time.
  10228. ; st PLR2_fire
  10229. ; bra dointer
  10230.  
  10231. firenownotpressed2:
  10232. ; fire has been released.
  10233. ; clr.b PLR2_fire
  10234. ; bra dointer
  10235.  
  10236. firenotpressed2
  10237.  
  10238. ; fire was not pressed last frame...
  10239.  
  10240. ; btst #7,$bfe001
  10241. ; if it has still not been pressed, go back above
  10242. ; bne.s firenownotpressed2
  10243. ; fire was not pressed last time, and was this time, so has
  10244. ; been clicked.
  10245. ; st PLR2_clicked
  10246. ; st PLR2_fire
  10247.  
  10248. dointer
  10249.  
  10250. JUSTSOUNDS:
  10251.  
  10252.  tst.b dosounds
  10253.  beq.s .notthing
  10254.  
  10255.  cmp.b #'4',Prefsfile+1
  10256.     beq fourchannel
  10257.  
  10258.  btst #1,$dff000+intreqr
  10259.     bne.s newsampbitl
  10260.  
  10261. .notthing:
  10262.  
  10263.  movem.l (a7)+,d0-d7/a0-a6
  10264.  
  10265.  moveq #0,d0
  10266.  rts
  10267.  
  10268.  
  10269. dosounds: dc.w 0
  10270.  
  10271. swappedem: dc.w 0
  10272.  
  10273. newsampbitl:
  10274.  
  10275.  move.w #$820f,$dff000+dmacon
  10276.  
  10277.  move.w #$200,$dff000+intreq
  10278.  
  10279. ; tst.b CHANNELDATA
  10280. ; bne nochannel0
  10281.  
  10282.  move.l pos0LEFT,a0
  10283.  move.l pos2LEFT,a1
  10284.  
  10285.  move.l #tab,a2
  10286.  
  10287.  moveq #0,d0
  10288.  moveq #0,d1
  10289.  move.b vol0left,d0
  10290.  move.b vol2left,d1
  10291.  cmp.b d1,d0
  10292.  slt swappedem
  10293.  bge.s fbig0
  10294.  
  10295. ; d1 is bigger so scale d0 and use d1
  10296. ; as audiochannel volume.
  10297.  
  10298.  exg a0,a1
  10299.  asl.w #6,d0
  10300.  divs d1,d0
  10301.  lsl.w #8,d0
  10302.  adda.w d0,a2
  10303.  move.w d1,$dff0a8
  10304.  bra.s donechan0
  10305.  
  10306. fbig0:
  10307.  tst.w d0
  10308.  beq.s donechan0
  10309.  asl.w #6,d1
  10310.  divs d0,d1
  10311.  lsl.w #8,d1
  10312.  adda.w d1,a2
  10313.  move.w d0,$dff0a8
  10314.  
  10315. donechan0:
  10316.  
  10317.  move.l Aupt0,a3
  10318.  move.l a3,$dff0a0
  10319.  move.l Auback0,Aupt0
  10320.  move.l a3,Auback0
  10321.  
  10322.  move.l Auback0,a3
  10323.  
  10324.  moveq #0,d0
  10325.  moveq #0,d1
  10326.  moveq #0,d2
  10327.  moveq #0,d3
  10328.  moveq #0,d4
  10329.  moveq #0,d5
  10330.  move.w #49,d7
  10331. loop:
  10332.  move.l (a0)+,d0
  10333.  move.b (a1)+,d1
  10334.  move.b (a1)+,d2
  10335.  move.b (a1)+,d3
  10336.  move.b (a1)+,d4
  10337.  move.b (a2,d3.w),d5
  10338.  swap d5
  10339.  move.b (a2,d1.w),d5
  10340.  asl.l #8,d5
  10341.  move.b (a2,d2.w),d5
  10342.  swap d5
  10343.  move.b (a2,d4.w),d5
  10344.  add.l d5,d0
  10345.  move.l d0,(a3)+
  10346.  dbra d7,loop
  10347.  
  10348.  tst.b swappedem
  10349.  beq.s .ok23
  10350.  exg a0,a1
  10351. .ok23:
  10352.  
  10353.  cmp.l Samp0endLEFT,a0
  10354.  blt.s .notoffendsamp1
  10355.  move.l #empty,a0
  10356.  move.l #emptyend,Samp0endLEFT
  10357.  move.b #0,vol0left
  10358.  st LEFTCHANDATA+1
  10359.  move.w #0,LEFTCHANDATA+2
  10360. .notoffendsamp1:
  10361.  
  10362.  cmp.l Samp2endLEFT,a1
  10363.  blt.s .notoffendsamp2
  10364.  move.l #empty,a1
  10365.  move.l #emptyend,Samp2endLEFT
  10366.  move.b #0,vol2left
  10367.  st LEFTCHANDATA+1+8
  10368.  move.w #0,LEFTCHANDATA+2+8
  10369. .notoffendsamp2:
  10370.  
  10371.  move.l a0,pos0LEFT
  10372.  move.l a1,pos2LEFT
  10373.  
  10374. nochannel0:
  10375.  
  10376.  tst.b CHANNELDATA+16
  10377.  bne nochannel1
  10378.  
  10379.  
  10380.  move.l pos0RIGHT,a0
  10381.  move.l pos2RIGHT,a1
  10382.  
  10383.  move.l Aupt1,a3
  10384.  move.l a3,$dff0b0
  10385.  move.l Auback1,Aupt1
  10386.  move.l a3,Auback1
  10387.  
  10388.  move.l #tab,a2
  10389.  
  10390.  moveq #0,d0
  10391.  moveq #0,d1
  10392.  move.b vol0right,d0
  10393.  move.b vol2right,d1
  10394.  cmp.b d1,d0
  10395.  slt swappedem
  10396.  bge.s fbig1
  10397.  
  10398. ; d1 is bigger so scale d0 and use d1
  10399. ; as audiochannel volume.
  10400.  
  10401.  exg a0,a1
  10402.  asl.w #6,d0
  10403.  divs d1,d0
  10404.  lsl.w #8,d0
  10405.  adda.w d0,a2
  10406.  move.w d1,$dff0b8
  10407.  bra.s donechan1
  10408.  
  10409. fbig1:
  10410.  tst.w d0
  10411.  beq.s donechan1
  10412.  asl.w #6,d1
  10413.  divs d0,d1
  10414.  lsl.w #8,d1
  10415.  adda.w d1,a2
  10416.  move.w d0,$dff0b8
  10417.  
  10418. donechan1:
  10419.  moveq #0,d0
  10420.  moveq #0,d1
  10421.  moveq #0,d2
  10422.  moveq #0,d3
  10423.  moveq #0,d4
  10424.  moveq #0,d5
  10425.  move.w #49,d7
  10426. loop2:
  10427.  move.l (a0)+,d0
  10428.  move.b (a1)+,d1
  10429.  move.b (a1)+,d2
  10430.  move.b (a1)+,d3
  10431.  move.b (a1)+,d4
  10432.  move.b (a2,d3.w),d5
  10433.  swap d5
  10434.  move.b (a2,d1.w),d5
  10435.  asl.l #8,d5
  10436.  move.b (a2,d2.w),d5
  10437.  swap d5
  10438.  move.b (a2,d4.w),d5
  10439.  add.l d5,d0
  10440.  move.l d0,(a3)+
  10441.  dbra d7,loop2
  10442.  
  10443.  tst.b swappedem
  10444.  beq.s ok01
  10445.  exg a0,a1
  10446. ok01:
  10447.  
  10448.  cmp.l Samp0endRIGHT,a0
  10449.  blt.s .notoffendsamp1
  10450.  move.l #empty,a0
  10451.  move.l #emptyend,Samp0endRIGHT
  10452.  move.b #0,vol0right
  10453.  st RIGHTCHANDATA+1
  10454.  move.w #0,RIGHTCHANDATA+2
  10455. .notoffendsamp1:
  10456.  
  10457.  cmp.l Samp2endRIGHT,a1
  10458.  blt.s .notoffendsamp2
  10459.  move.l #empty,a1
  10460.  move.l #emptyend,Samp2endRIGHT
  10461.  move.b #0,vol2right
  10462.  st RIGHTCHANDATA+1+8
  10463.  move.w #0,RIGHTCHANDATA+2+8
  10464. .notoffendsamp2:
  10465.  
  10466.  move.l a0,pos0RIGHT
  10467.  move.l a1,pos2RIGHT
  10468.  
  10469. nochannel1:
  10470.  
  10471. ******************* Other two channels
  10472.  
  10473.  move.l pos1LEFT,a0
  10474.  move.l pos3LEFT,a1
  10475.  
  10476.  move.l #tab,a2
  10477.  
  10478.  moveq #0,d0
  10479.  moveq #0,d1
  10480.  move.b vol1left,d0
  10481.  move.b vol3left,d1
  10482.  cmp.b d1,d0
  10483.  slt swappedem
  10484.  bge.s fbig2
  10485.  
  10486. ; d1 is bigger so scale d0 and use d1
  10487. ; as audiochannel volume.
  10488.  
  10489.  exg a0,a1
  10490.  asl.w #6,d0
  10491.  divs d1,d0
  10492.  lsl.w #8,d0
  10493.  adda.w d0,a2
  10494.  move.w d1,$dff0d8
  10495.  bra.s donechan2
  10496.  
  10497. fbig2:
  10498.  tst.w d0
  10499.  beq.s donechan2
  10500.  asl.w #6,d1
  10501.  divs d0,d1
  10502.  lsl.w #8,d1
  10503.  adda.w d1,a2
  10504.  move.w d0,$dff0d8
  10505.  
  10506. donechan2:
  10507.  
  10508.  move.l Aupt2,a3
  10509.  move.l a3,$dff0d0
  10510.  move.l Auback2,Aupt2
  10511.  move.l a3,Auback2
  10512.  
  10513.  moveq #0,d0
  10514.  moveq #0,d1
  10515.  moveq #0,d2
  10516.  moveq #0,d3
  10517.  moveq #0,d4
  10518.  moveq #0,d5
  10519.  move.w #49,d7
  10520. loop3:
  10521.  move.l (a0)+,d0
  10522.  move.b (a1)+,d1
  10523.  move.b (a1)+,d2
  10524.  move.b (a1)+,d3
  10525.  move.b (a1)+,d4
  10526.  move.b (a2,d3.w),d5
  10527.  swap d5
  10528.  move.b (a2,d1.w),d5
  10529.  asl.l #8,d5
  10530.  move.b (a2,d2.w),d5
  10531.  swap d5
  10532.  move.b (a2,d4.w),d5
  10533.  add.l d5,d0
  10534.  move.l d0,(a3)+
  10535.  dbra d7,loop3
  10536.  
  10537.  tst.b swappedem
  10538.  beq.s .ok23
  10539.  exg a0,a1
  10540. .ok23:
  10541.  
  10542.  cmp.l Samp1endLEFT,a0
  10543.  blt.s .notoffendsamp3
  10544.  move.l #empty,a0
  10545.  move.l #emptyend,Samp1endLEFT
  10546.  move.b #0,vol1left
  10547.  st LEFTCHANDATA+1+4
  10548.  move.w #0,LEFTCHANDATA+2+4
  10549. .notoffendsamp3:
  10550.  
  10551.  cmp.l Samp3endLEFT,a1
  10552.  blt.s .notoffendsamp4
  10553.  move.l #empty,a1
  10554.  move.l #emptyend,Samp3endLEFT
  10555.  move.b #0,vol3left
  10556.  st LEFTCHANDATA+1+12
  10557.  move.w #0,LEFTCHANDATA+2+12
  10558. .notoffendsamp4:
  10559.  
  10560.  move.l a0,pos1LEFT
  10561.  move.l a1,pos3LEFT
  10562.  
  10563.  move.l pos1RIGHT,a0
  10564.  move.l pos3RIGHT,a1
  10565.  
  10566.  move.l Aupt3,a3
  10567.  move.l a3,$dff0c0
  10568.  move.l Auback3,Aupt3
  10569.  move.l a3,Auback3
  10570.  
  10571.  move.l #tab,a2
  10572.  
  10573.  moveq #0,d0
  10574.  moveq #0,d1
  10575.  move.b vol1right,d0
  10576.  move.b vol3right,d1
  10577.  cmp.b d1,d0
  10578.  slt.s swappedem
  10579.  bge.s fbig3
  10580.  
  10581.  exg a0,a1
  10582.  asl.w #6,d0
  10583.  divs d1,d0
  10584.  lsl.w #8,d0
  10585.  adda.w d0,a2
  10586.  move.w d1,$dff0c8
  10587.  bra.s donechan3
  10588.  
  10589. fbig3:
  10590.  tst.w d0
  10591.  beq.s donechan3
  10592.  asl.w #6,d1
  10593.  divs d0,d1
  10594.  lsl.w #8,d1
  10595.  adda.w d1,a2
  10596.  move.w d0,$dff0c8
  10597. donechan3:
  10598.  
  10599.  moveq #0,d0
  10600.  moveq #0,d1
  10601.  moveq #0,d2
  10602.  moveq #0,d3
  10603.  moveq #0,d4
  10604.  moveq #0,d5
  10605.  move.w #49,d7
  10606. loop4:
  10607.  move.l (a0)+,d0
  10608.  move.b (a1)+,d1
  10609.  move.b (a1)+,d2
  10610.  move.b (a1)+,d3
  10611.  move.b (a1)+,d4
  10612.  move.b (a2,d3.w),d5
  10613.  swap d5
  10614.  move.b (a2,d1.w),d5
  10615.  asl.l #8,d5
  10616.  move.b (a2,d2.w),d5
  10617.  swap d5
  10618.  move.b (a2,d4.w),d5
  10619.  add.l d5,d0
  10620.  move.l d0,(a3)+
  10621.  dbra d7,loop4
  10622.  
  10623.  tst.b swappedem
  10624.  beq.s .ok23
  10625.  exg a0,a1
  10626. .ok23:
  10627.  
  10628.  cmp.l Samp1endRIGHT,a0
  10629.  blt.s notoffendsamp3
  10630.  move.l #empty,a0
  10631.  move.l #emptyend,Samp1endRIGHT
  10632.  move.b #0,vol1right
  10633.  st RIGHTCHANDATA+1+4
  10634.  move.w #0,RIGHTCHANDATA+2+4
  10635. notoffendsamp3:
  10636.  
  10637.  cmp.l Samp3endRIGHT,a1
  10638.  blt.s notoffendsamp4
  10639.  move.l #empty,a1
  10640.  move.l #emptyend,Samp3endRIGHT
  10641.  move.b #0,vol3right
  10642.  st RIGHTCHANDATA+1+12
  10643.  move.w #0,RIGHTCHANDATA+2+12
  10644. notoffendsamp4:
  10645.  
  10646.  move.l a0,pos1RIGHT
  10647.  move.l a1,pos3RIGHT
  10648.  
  10649.  movem.l (a7)+,d0-d7/a0-a6
  10650.  tst.b counting
  10651.  beq .nostartcounter
  10652.  JSR STARTCOUNT
  10653. .nostartcounter:
  10654.  
  10655.  moveq #0,d0
  10656.  rts
  10657.  
  10658. ***********************************
  10659. * 4 channel sound routine
  10660. ***********************************
  10661.  
  10662. fourchannel:
  10663.  
  10664.  move.l #$dff000,a6
  10665.  
  10666.  btst #7,intreqrl(a6)
  10667.  beq.s nofinish0
  10668. ; move.w #0,LEFTCHANDATA+2
  10669. ; st LEFTCHANDATA+1
  10670.  move.l #null,$a0(a6)
  10671.  move.w #100,$a4(a6) 
  10672.  move.w #$0080,intreq(a6)
  10673. nofinish0:
  10674.  
  10675.  tst.b NoiseMade0pLEFT
  10676.  beq.s NoChan0sound
  10677.  
  10678.  move.l Samp0endLEFT,d0
  10679.  move.l pos0LEFT,d1
  10680.  sub.l d1,d0
  10681.  lsr.l #1,d0
  10682.  move.w d0,$a4(a6)
  10683.  move.l d1,$a0(a6)
  10684.  move.w #$8201,dmacon(a6)
  10685.  moveq #0,d0
  10686.  move.b vol0left,d0
  10687.  move.w d0,$a8(a6)
  10688.  
  10689. NoChan0sound:
  10690.  
  10691. *****************************************
  10692. *****************************************
  10693.  
  10694.  btst #0,intreqr(a6)
  10695.  beq.s nofinish1
  10696.  move.l #null,$b0(a6)
  10697.  move.w #100,$b4(a6)
  10698.  move.w #$0100,intreq(a6)
  10699. nofinish1:
  10700.  
  10701.  tst.b NoiseMade0pRIGHT
  10702.  beq.s NoChan1sound
  10703.  
  10704.  move.l Samp0endRIGHT,d0
  10705.  move.l pos0RIGHT,d1
  10706.  sub.l d1,d0
  10707.  lsr.l #1,d0
  10708.  move.w d0,$b4(a6)
  10709.  move.l d1,$b0(a6)
  10710.  move.w d0,playnull1
  10711.  move.w #$8202,dmacon(a6)
  10712.  moveq #0,d0
  10713.  move.b vol0right,d0
  10714.  move.w d0,$b8(a6)
  10715.  
  10716. NoChan1sound:
  10717.  
  10718. *****************************************
  10719. *****************************************
  10720.  
  10721.  btst #1,intreqr(a6)
  10722.  beq.s nofinish2
  10723.  move.l #null,$c0(a6)
  10724.  move.w #100,$c4(a6)
  10725.  move.w #$0200,intreq(a6)
  10726. nofinish2:
  10727.  
  10728.  tst.b NoiseMade1pRIGHT
  10729.  beq.s NoChan2sound
  10730.  
  10731.  move.l Samp1endRIGHT,d0
  10732.  move.l pos1RIGHT,d1
  10733.  sub.l d1,d0
  10734.  lsr.l #1,d0
  10735.  move.w d0,$c4(a6)
  10736.  move.w d0,playnull2
  10737.  
  10738.  move.l d1,$c0(a6)
  10739.  move.w #$8204,dmacon(a6)
  10740.  moveq #0,d0
  10741.  move.b vol1right,d0
  10742.  move.w d0,$c8(a6)
  10743.  
  10744. NoChan2sound:
  10745.  
  10746. *****************************************
  10747. *****************************************
  10748.  
  10749.  btst #2,intreqr(a6)
  10750.  beq.s nofinish3
  10751.  move.l #null,$d0(a6)
  10752.  move.w #100,$d4(a6)
  10753.  move.w #$0400,intreq(a6)
  10754. nofinish3:
  10755.  
  10756.  tst.b NoiseMade1pLEFT
  10757.  beq.s NoChan3sound
  10758.  
  10759.  move.l Samp1endLEFT,d0
  10760.  move.l pos1LEFT,d1
  10761.  sub.l d1,d0
  10762.  lsr.l #1,d0
  10763.  move.w d0,$d4(a6)
  10764.  move.w d0,playnull3
  10765.  move.l d1,$d0(a6)
  10766.  move.w #$8208,dmacon(a6)
  10767.  moveq #0,d0
  10768.  move.b vol1left,d0
  10769.  move.w d0,$d8(a6)
  10770.  
  10771. NoChan3sound:
  10772.  
  10773. nomorechannels:
  10774.  
  10775.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  10776.  move.l #0,NoiseMade0LEFT
  10777.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  10778.  move.l #0,NoiseMade0RIGHT
  10779.  
  10780. ; tst.b playnull0
  10781. ; beq.s .nnul
  10782. ; sub.b #1,playnull0
  10783. ; bra.s chan0still
  10784. ;.nnul:
  10785. ;chan0still:
  10786.  
  10787.  tst.b NoiseMade0pLEFT
  10788.  bne.s chan0still
  10789.  tst.w playnull0
  10790.  beq.s nnul0
  10791.  sub.w #100,playnull0
  10792.  bra.s chan0still
  10793. nnul0:
  10794.  move.w #0,LEFTCHANDATA+2
  10795.  st LEFTCHANDATA+1
  10796. chan0still:
  10797.  
  10798.  tst.b NoiseMade0pRIGHT
  10799.  bne.s chan1still
  10800.  tst.w playnull1
  10801.  beq.s nnul1
  10802.  sub.w #100,playnull1
  10803.  bra.s chan1still
  10804. nnul1:
  10805.  move.w #0,RIGHTCHANDATA+2
  10806.  st RIGHTCHANDATA+1
  10807. chan1still:
  10808.  
  10809.  tst.b NoiseMade1pRIGHT
  10810.  bne.s chan2still
  10811.  tst.w playnull2
  10812.  beq.s nnul2
  10813.  sub.w #100,playnull2
  10814.  bra.s chan2still
  10815. nnul2:
  10816.  move.w #0,RIGHTCHANDATA+2+4
  10817.  st RIGHTCHANDATA+1+4
  10818. chan2still:
  10819.  
  10820.  tst.b NoiseMade1pLEFT
  10821.  bne.s chan3still
  10822.  tst.w playnull3
  10823.  beq.s nnul3
  10824.  sub.w #100,playnull3
  10825.  bra.s chan3still
  10826. nnul3:
  10827.  move.w #0,LEFTCHANDATA+2+4
  10828.  st LEFTCHANDATA+1+4
  10829.  
  10830. chan3still:
  10831.  
  10832.  
  10833.  movem.l (a7)+,d0-d7/a0-a6
  10834.  
  10835.  moveq #0,d0
  10836.  rts
  10837.  
  10838. backbeat: dc.w 0
  10839.  
  10840. playnull0: dc.w 0
  10841. playnull1: dc.w 0
  10842. playnull2: dc.w 0
  10843. playnull3: dc.w 0
  10844.  
  10845. Samp0endRIGHT: dc.l emptyend
  10846. Samp1endRIGHT: dc.l emptyend
  10847. Samp2endRIGHT: dc.l emptyend
  10848. Samp3endRIGHT: dc.l emptyend
  10849. Samp0endLEFT: dc.l emptyend
  10850. Samp1endLEFT: dc.l emptyend
  10851. Samp2endLEFT: dc.l emptyend
  10852. Samp3endLEFT: dc.l emptyend
  10853.  
  10854. Aupt0: dc.l null
  10855. Auback0: dc.l null+500
  10856. Aupt2: dc.l null3
  10857. Auback2: dc.l null3+500
  10858. Aupt3: dc.l null4
  10859. Auback3: dc.l null4+500
  10860. Aupt1: dc.l null2
  10861. Auback1: dc.l null2+500
  10862.  
  10863. NoiseMade0LEFT: dc.b 0
  10864. NoiseMade1LEFT: dc.b 0
  10865. NoiseMade2LEFT: dc.b 0
  10866. NoiseMade3LEFT: dc.b 0
  10867. NoiseMade0pLEFT: dc.b 0
  10868. NoiseMade1pLEFT: dc.b 0
  10869. NoiseMade2pLEFT: dc.b 0
  10870. NoiseMade3pLEFT: dc.b 0
  10871. NoiseMade0RIGHT: dc.b 0
  10872. NoiseMade1RIGHT: dc.b 0
  10873. NoiseMade2RIGHT: dc.b 0
  10874. NoiseMade3RIGHT: dc.b 0
  10875. NoiseMade0pRIGHT: dc.b 0
  10876. NoiseMade1pRIGHT: dc.b 0
  10877. NoiseMade2pRIGHT: dc.b 0
  10878. NoiseMade3pRIGHT: dc.b 0
  10879.  
  10880. empty: ds.l 100
  10881. emptyend:
  10882.  
  10883. **************************************
  10884. * I want a routine to calculate all the
  10885. * info needed for the sound player to
  10886. * work, given say position of noise, volume
  10887. * and sample number.
  10888.  
  10889. Samplenum: dc.w 0
  10890. Noisex: dc.w 0
  10891. Noisez: dc.w 0
  10892. Noisevol: dc.w 0
  10893. chanpick: dc.w 0
  10894. IDNUM: dc.w 0
  10895. needleft: dc.b 0
  10896. needright: dc.b 0
  10897. STEREO: dc.b $0
  10898. even
  10899. prot6: dc.w 0
  10900.  
  10901.  even
  10902.  
  10903. CHANNELDATA:
  10904. LEFTCHANDATA:
  10905.  dc.l $00000000
  10906.  dc.l $00000000
  10907.  dc.l $FF000000
  10908.  dc.l $FF000000
  10909. RIGHTCHANDATA:
  10910.  dc.l $00000000
  10911.  dc.l $00000000
  10912.  dc.l $FF000000
  10913.  dc.l $FF000000
  10914.  
  10915. RIGHTPLAYEDTAB: ds.l 20
  10916. LEFTPLAYEDTAB: ds.l 20
  10917.  
  10918. MakeSomeNoise:
  10919.  
  10920. ; Plan for new sound handler:
  10921. ; It is sent a sample number,
  10922. ; a position relative to the
  10923. ; player, an id number and a volume.
  10924. ; Also notifplaying.
  10925.  
  10926. ; indirect inputs are the available
  10927. ; channel flags and whether or not
  10928. ; stereo sound is selected.
  10929.  
  10930. ; the algorithm must decide
  10931. ; whether the new sound is more
  10932. ; important than the ones already
  10933. ; playing. Thus an 'importance'
  10934. ; must be calculated, probably
  10935. ; using volume.
  10936.  
  10937. ; The output needs to be:
  10938.  
  10939. ; Write the pointers and volumes of
  10940. ; the sound channels
  10941.  
  10942.  
  10943.  tst.b notifplaying
  10944.  beq.s dontworry
  10945.  
  10946. ; find if we are already playing
  10947.  
  10948.  move.b IDNUM,d0
  10949.  move.w #7,d1
  10950.  lea CHANNELDATA,a3
  10951. findsameasme
  10952.  tst.b (a3)
  10953.  bne.s notavail
  10954.  cmp.b 1(a3),d0
  10955.  beq SameAsMe
  10956. notavail:
  10957.  add.w #4,a3
  10958.  dbra d1,findsameasme
  10959.  bra dontworry
  10960. SameAsMe
  10961.  rts
  10962.  
  10963. noiseloud: dc.w 0
  10964.  
  10965. dontworry:
  10966.  
  10967. ; Ok its fine for us to play a sound.
  10968. ; So calculate left/right volume.
  10969.  
  10970.  move.w Noisex,d1
  10971.  muls d1,d1
  10972.  move.w Noisez,d2
  10973.  muls d2,d2
  10974.  move.w #64,d3
  10975.  move.w #32767,noiseloud
  10976.  moveq #1,d0
  10977.  add.l d1,d2
  10978.  beq pastcalc
  10979.  
  10980.  move.w #31,d0
  10981. .findhigh
  10982.  btst d0,d2
  10983.  bne .foundhigh
  10984.  dbra d0,.findhigh
  10985. .foundhigh
  10986.  asr.w #1,d0
  10987.  clr.l d3
  10988.  bset d0,d3
  10989.  move.l d3,d0
  10990.  
  10991.  move.w d0,d3
  10992.  muls d3,d3    ; x*x
  10993.  sub.l d2,d3    ; x*x-a
  10994.  asr.l #1,d3    ; (x*x-a)/2
  10995.  divs d0,d3    ; (x*x-a)/2x
  10996.  sub.w d3,d0    ; second approx
  10997.  bgt .stillnot0
  10998.  move.w #1,d0
  10999. .stillnot0
  11000.  
  11001.  move.w d0,d3
  11002.  muls d3,d3
  11003.  sub.l d2,d3
  11004.  asr.l #1,d3
  11005.  divs d0,d3
  11006.  sub.w d3,d0    ; second approx
  11007.  bgt .stillnot02
  11008.  move.w #1,d0
  11009. .stillnot02
  11010.  
  11011.  move.w Noisevol,d3
  11012.  ext.l d3
  11013.  asl.l #6,d3
  11014.  cmp.l #32767,d3
  11015.  ble.s .nnnn
  11016.  move.l #32767,d3
  11017. .nnnn
  11018.  
  11019.  asr.w #2,d0
  11020.  addq #1,d0
  11021.  divs d0,d3
  11022.  
  11023.  move.w d3,noiseloud
  11024.  
  11025.  cmp.w #64,d3
  11026.  ble.s notooloud
  11027.  move.w #64,d3
  11028. notooloud:
  11029.  
  11030. pastcalc:
  11031.  
  11032.     ; d3 contains volume of noise.
  11033.     
  11034.  move.w d3,d4
  11035.  tst.b STEREO
  11036.  beq NOSTEREO
  11037.  
  11038.  move.w d3,d2
  11039.  muls Noisex,d2
  11040.  asl.w #2,d0
  11041.  divs d0,d2
  11042.  
  11043.  bgt.s quietleft
  11044.  add.w d2,d4
  11045.  bge.s donequiet
  11046.  move.w #0,d4
  11047.  bra.s donequiet
  11048. quietleft:
  11049.  sub.w d2,d3
  11050.  bge.s donequiet
  11051.  move.w #0,d3
  11052. donequiet:
  11053.  
  11054. ; d3=leftvol?
  11055. ; d4=rightvol?
  11056.  
  11057.  clr.w needleft
  11058.  
  11059.  cmp.b d3,d4
  11060.  bgt.s RightLouder
  11061.  
  11062. ; Left is louder; is it MUCH louder?
  11063.  
  11064.  st needleft
  11065.  move.w d3,d2
  11066.  sub.w d4,d2
  11067.  cmp.w #32,d2
  11068.  slt needright
  11069.  bra aboutsame
  11070.  
  11071. RightLouder:
  11072.  st needright
  11073.  move.w d4,d2
  11074.  sub.w d3,d2
  11075.  cmp.w #32,d2
  11076.  slt needleft
  11077.  
  11078. aboutsame:
  11079.  
  11080.  
  11081. ; Find least important sound on left
  11082.  
  11083.  move.l #0,a2
  11084.  move.l #0,d5
  11085.  move.w #32767,d2
  11086.  move.b IDNUM,d0
  11087.  lea LEFTCHANDATA,a3
  11088.  move.w #3,d1
  11089. FindLeftChannel
  11090.  tst.b (a3)
  11091.  bne.s .notactive
  11092.  cmp.b 1(a3),d0
  11093.  beq.s FOUNDLEFT
  11094.  cmp.w 2(a3),d2
  11095.  blt.s .notactive
  11096.  move.w 2(a3),d2
  11097.  move.l a3,a2
  11098.  move.w d5,d6
  11099.  
  11100. .notactive:
  11101.  add.w #4,a3
  11102.  add.w #1,d5
  11103.  dbra d1,FindLeftChannel
  11104.  move.l a2,a3
  11105.  bra.s gopastleft
  11106. FOUNDLEFT:
  11107.  move.w d5,d6
  11108. gopastleft:
  11109.  tst.l a3
  11110.  bne.s FOUNDALEFT
  11111.  rts
  11112. FOUNDALEFT:
  11113.  
  11114. ; d6 = channel number
  11115.  move.b d0,1(a3)
  11116.  move.w d3,2(a3)
  11117.  
  11118.  move.w Samplenum,d5
  11119.  move.l #SampleList,a3
  11120.  move.l (a3,d5.w*8),a1
  11121.  move.l 4(a3,d5.w*8),a2
  11122.  
  11123.  tst.b d6
  11124.  seq NoiseMade0LEFT
  11125.  beq.s .chan0
  11126.  cmp.b #2,d6
  11127.  slt NoiseMade1LEFT
  11128.  blt .chan1
  11129.  seq NoiseMade2LEFT
  11130.  beq .chan2
  11131.  st NoiseMade3LEFT
  11132.  
  11133.  move.b d5,LEFTPLAYEDTAB+9
  11134.  move.b d3,LEFTPLAYEDTAB+1+9
  11135.  move.b d4,LEFTPLAYEDTAB+2+9
  11136.  move.b d3,vol3left
  11137.  move.l a1,pos3LEFT
  11138.  move.l a2,Samp3endLEFT
  11139.  bra dorightchan
  11140.  
  11141. .chan0: 
  11142.  move.b d5,LEFTPLAYEDTAB
  11143.  move.b d3,LEFTPLAYEDTAB+1
  11144.  move.b d4,LEFTPLAYEDTAB+2
  11145.  move.l a1,pos0LEFT
  11146.  move.l a2,Samp0endLEFT
  11147.  move.b d3,vol0left
  11148.  bra dorightchan
  11149.  
  11150. .chan1:
  11151.  move.b d5,LEFTPLAYEDTAB+3
  11152.  move.b d3,LEFTPLAYEDTAB+1+3
  11153.  move.b d4,LEFTPLAYEDTAB+2+3
  11154.  move.b d3,vol1left
  11155.  move.l a1,pos1LEFT
  11156.  move.l a2,Samp1endLEFT
  11157.  bra dorightchan
  11158.  
  11159. .chan2: 
  11160.  move.b d5,LEFTPLAYEDTAB+6
  11161.  move.b d3,LEFTPLAYEDTAB+1+6
  11162.  move.b d4,LEFTPLAYEDTAB+2+6
  11163.  move.l a1,pos2LEFT
  11164.  move.l a2,Samp2endLEFT
  11165.  move.b d3,vol2left
  11166.  
  11167. dorightchan:
  11168.  
  11169. ; Find least important sound on right
  11170.  
  11171.  move.l #0,a2
  11172.  move.l #0,d5
  11173.  move.w #10000,d2
  11174.  move.b IDNUM,d0
  11175.  lea RIGHTCHANDATA,a3
  11176.  move.w #3,d1
  11177. FindRightChannel
  11178.  tst.b (a3)
  11179.  bne.s .notactive
  11180.  cmp.b 1(a3),d0
  11181.  beq.s FOUNDRIGHT
  11182.  cmp.w 2(a3),d2
  11183.  blt.s .notactive
  11184.  move.w 2(a3),d2
  11185.  move.l a3,a2
  11186.  move.w d5,d6
  11187.  
  11188. .notactive:
  11189.  add.w #4,a3
  11190.  add.w #1,d5
  11191.  dbra d1,FindRightChannel
  11192.  move.l a2,a3
  11193.  bra.s gopastright
  11194. FOUNDRIGHT:
  11195.  move.w d5,d6
  11196. gopastright:
  11197.  tst.l a3
  11198.  bne.s FOUNDARIGHT
  11199.  rts
  11200. FOUNDARIGHT:
  11201.  
  11202. ; d6 = channel number
  11203.  move.b d0,1(a3)
  11204.  move.w d3,2(a3)
  11205.  
  11206.  move.w Samplenum,d5
  11207.  move.l #SampleList,a3
  11208.  move.l (a3,d5.w*8),a1
  11209.  move.l 4(a3,d5.w*8),a2
  11210.  
  11211.  tst.b d6
  11212.  seq NoiseMade0RIGHT
  11213.  beq.s .chan0
  11214.  cmp.b #2,d6
  11215.  slt NoiseMade1RIGHT
  11216.  blt .chan1
  11217.  seq NoiseMade2RIGHT
  11218.  beq .chan2
  11219.  st NoiseMade3RIGHT
  11220.  
  11221.  move.b d5,RIGHTPLAYEDTAB+9
  11222.  move.b d3,RIGHTPLAYEDTAB+1+9
  11223.  move.b d4,RIGHTPLAYEDTAB+2+9
  11224.  move.b d4,vol3right
  11225.  move.l a1,pos3RIGHT
  11226.  move.l a2,Samp3endRIGHT
  11227.  rts
  11228.  
  11229. .chan0: 
  11230.  move.b d5,RIGHTPLAYEDTAB
  11231.  move.b d3,RIGHTPLAYEDTAB+1
  11232.  move.b d4,RIGHTPLAYEDTAB+2
  11233.  move.l a1,pos0RIGHT
  11234.  move.l a2,Samp0endRIGHT
  11235.  move.b d4,vol0right
  11236.  rts
  11237.  
  11238. .chan1:
  11239.  move.b d5,RIGHTPLAYEDTAB+3
  11240.  move.b d3,RIGHTPLAYEDTAB+1+3
  11241.  move.b d4,RIGHTPLAYEDTAB+2+3
  11242.  move.b d3,vol1right
  11243.  move.l a1,pos1RIGHT
  11244.  move.l a2,Samp1endRIGHT
  11245.  rts
  11246.  
  11247. .chan2: 
  11248.  move.b d5,RIGHTPLAYEDTAB+6
  11249.  move.b d3,RIGHTPLAYEDTAB+1+6
  11250.  move.b d4,RIGHTPLAYEDTAB+2+6
  11251.  move.l a1,pos2RIGHT
  11252.  move.l a2,Samp2endRIGHT
  11253.  move.b d3,vol2right
  11254.  rts
  11255.  
  11256. NOSTEREO:
  11257.  move.l #0,a2
  11258.  move.l #-1,d5
  11259.  move.w #32767,d2
  11260.  move.b IDNUM,d0
  11261.  lea CHANNELDATA,a3
  11262.  move.w #7,d1
  11263. FindChannel
  11264.  tst.b (a3)
  11265.  bne.s .notactive
  11266.  cmp.b 1(a3),d0
  11267.  beq.s FOUNDCHAN
  11268.  cmp.w 2(a3),d2
  11269.  blt.s .notactive
  11270.  move.w 2(a3),d2
  11271.  move.l a3,a2
  11272.  move.w d5,d6
  11273.  add.w #1,d6
  11274.  
  11275. .notactive:
  11276.  add.w #4,a3
  11277.  add.w #1,d5
  11278.  dbra d1,FindChannel
  11279.  
  11280.  move.l a2,a3
  11281.  bra.s gopastchan
  11282. FOUNDCHAN:
  11283.  move.w d5,d6
  11284.  add.w #1,d6
  11285. gopastchan:
  11286.  tst.w d6
  11287.  bge.s FOUNDACHAN
  11288. tooquiet:
  11289.  rts
  11290. FOUNDACHAN:
  11291.  
  11292. ; d6 = channel number
  11293.  
  11294.  cmp.w noiseloud,d2
  11295.  bgt.s tooquiet
  11296.  
  11297.  move.b d0,1(a3)
  11298.  move.w noiseloud,2(a3)
  11299.  
  11300.  move.w Samplenum,d5
  11301.  move.l #SampleList,a3
  11302.  move.l (a3,d5.w*8),a1
  11303.  move.l 4(a3,d5.w*8),a2
  11304.  
  11305.  tst.b d6
  11306.  beq .chan0
  11307.  cmp.b #2,d6
  11308.  blt .chan1
  11309.  beq .chan2
  11310.  cmp.b #4,d6
  11311.  blt .chan3
  11312.  beq .chan4
  11313.  cmp.b #6,d6
  11314.  blt .chan5
  11315.  beq .chan6
  11316.  st NoiseMade3RIGHT
  11317.  
  11318.  move.b d5,RIGHTPLAYEDTAB+9
  11319.  move.b d3,RIGHTPLAYEDTAB+1+9
  11320.  move.b d4,RIGHTPLAYEDTAB+2+9
  11321.  move.b d4,vol3right
  11322.  move.l a1,pos3RIGHT
  11323.  move.l a2,Samp3endRIGHT
  11324.  rts
  11325.  
  11326. .chan3:
  11327.  st NoiseMade3LEFT
  11328.  move.b d5,LEFTPLAYEDTAB+9
  11329.  move.b d3,LEFTPLAYEDTAB+1+9
  11330.  move.b d4,LEFTPLAYEDTAB+2+9
  11331.  move.b d3,vol3left
  11332.  move.l a1,pos3LEFT
  11333.  move.l a2,Samp3endLEFT
  11334.  bra dorightchan
  11335.  
  11336. .chan0: 
  11337.  st NoiseMade0LEFT
  11338.  move.b d5,LEFTPLAYEDTAB
  11339.  move.b d3,LEFTPLAYEDTAB+1
  11340.  move.b d4,LEFTPLAYEDTAB+2
  11341.  move.l a1,pos0LEFT
  11342.  move.l a2,Samp0endLEFT
  11343.  move.b d3,vol0left
  11344.  rts
  11345.  
  11346. .chan1:
  11347.  st NoiseMade1LEFT
  11348.  move.b d5,LEFTPLAYEDTAB+3
  11349.  move.b d3,LEFTPLAYEDTAB+1+3
  11350.  move.b d4,LEFTPLAYEDTAB+2+3
  11351.  move.b d3,vol1left
  11352.  move.l a1,pos1LEFT
  11353.  move.l a2,Samp1endLEFT
  11354.  rts
  11355.  
  11356. .chan2: 
  11357.  st NoiseMade2LEFT
  11358.  move.b d5,LEFTPLAYEDTAB+6
  11359.  move.b d3,LEFTPLAYEDTAB+1+6
  11360.  move.b d4,LEFTPLAYEDTAB+2+6
  11361.  move.l a1,pos2LEFT
  11362.  move.l a2,Samp2endLEFT
  11363.  move.b d3,vol2left
  11364.  rts
  11365.  
  11366. .chan4: 
  11367.  st NoiseMade0RIGHT
  11368.  move.b d5,RIGHTPLAYEDTAB
  11369.  move.b d3,RIGHTPLAYEDTAB+1
  11370.  move.b d4,RIGHTPLAYEDTAB+2
  11371.  move.l a1,pos0RIGHT
  11372.  move.l a2,Samp0endRIGHT
  11373.  move.b d4,vol0right
  11374.  rts
  11375.  
  11376. .chan5:
  11377.  st NoiseMade1RIGHT
  11378.  move.b d5,RIGHTPLAYEDTAB+3
  11379.  move.b d3,RIGHTPLAYEDTAB+1+3
  11380.  move.b d4,RIGHTPLAYEDTAB+2+3
  11381.  move.b d3,vol1right
  11382.  move.l a1,pos1RIGHT
  11383.  move.l a2,Samp1endRIGHT
  11384.  rts
  11385.  
  11386. .chan6: 
  11387.  st NoiseMade2RIGHT
  11388.  move.b d5,RIGHTPLAYEDTAB+6
  11389.  move.b d3,RIGHTPLAYEDTAB+1+6
  11390.  move.b d4,RIGHTPLAYEDTAB+2+6
  11391.  move.l a1,pos2RIGHT
  11392.  move.l a2,Samp2endRIGHT
  11393.  move.b d3,vol2right
  11394.  rts
  11395.  
  11396. SampleList:
  11397.  dc.l Scream,EndScream
  11398.  dc.l Shoot,EndShoot
  11399.  dc.l Munch,EndMunch
  11400.  dc.l PooGun,EndPooGun
  11401.  dc.l Collect,EndCollect
  11402. ;5
  11403.  dc.l DoorNoise,EndDoorNoise
  11404.  dc.l 0,0
  11405.  dc.l Stomp,EndStomp
  11406.  dc.l LowScream,EndLowScream
  11407.  dc.l BaddieGun,EndBaddieGun
  11408. ;10
  11409.  dc.l SwitchNoise,EndSwitch
  11410.  dc.l Reload,EndReload
  11411.  dc.l NoAmmo,EndNoAmmo
  11412.  dc.l Splotch,EndSplotch
  11413.  dc.l SplatPop,EndSplatPop
  11414. ;15
  11415.  dc.l Boom,EndBoom
  11416.  dc.l Hiss,EndHiss
  11417.  dc.l Howl1,EndHowl1
  11418.  dc.l Howl2,EndHowl2
  11419.  dc.l Pant,EndPant
  11420. ;20
  11421.  dc.l Whoosh,EndWhoosh
  11422.  dc.l ROAR,EndROAR
  11423.  dc.l whoosh,Endwhoosh
  11424.  dc.l 0,0
  11425.  dc.l 0,0
  11426.  dc.l 0,0
  11427.  dc.l 0,0
  11428.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11429.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11430.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11431.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11432.  
  11433.  dc.l 0
  11434.  
  11435. storeval: dc.w 0
  11436.  
  11437.  include "ab3:source_4000/wallchunk.s"
  11438.  include "ab3:source_4000/newloadfromdisk.s"
  11439.  include "ab3:source_4000/screensetup.s"
  11440.  include "ab3:source_4000/NEWWBCONTROLLOOP.s"
  11441.  include "ab3:source_4000/WBSETUP"
  11442.  
  11443.  
  11444.  
  11445. saveinters:  
  11446.  dc.w 0
  11447.  
  11448. z: dc.w 10
  11449.  
  11450. notifplaying:
  11451.  dc.w 0
  11452.  
  11453. audpos1: dc.w 0
  11454. audpos1b: dc.w 0
  11455. audpos2: dc.w 0
  11456. audpos2b: dc.w 0
  11457. audpos3: dc.w 0
  11458. audpos3b: dc.w 0
  11459. audpos4: dc.w 0
  11460. audpos4b: dc.w 0
  11461.  
  11462. vol0left: dc.w 0
  11463. vol0right: dc.w 0
  11464. vol1left: dc.w 0
  11465. vol1right: dc.w 0
  11466. vol2left: dc.w 0
  11467. vol2right: dc.w 0
  11468. vol3left: dc.w 0
  11469. vol3right: dc.w 0
  11470.  
  11471. pos: dc.l 0
  11472.  
  11473. pos0LEFT: dc.l empty
  11474. pos1LEFT: dc.l empty
  11475. pos2LEFT: dc.l empty
  11476. pos3LEFT: dc.l empty
  11477. pos0RIGHT: dc.l empty
  11478. pos1RIGHT: dc.l empty
  11479. pos2RIGHT: dc.l empty
  11480. pos3RIGHT: dc.l empty
  11481.  
  11482. numtodo dc.w 0
  11483.  
  11484. npt: dc.w 0
  11485.  
  11486. pretab:
  11487. val SET 0
  11488.  REPT 128
  11489.  dc.b val
  11490. val SET val+1
  11491.  ENDR
  11492. val SET -128
  11493.  REPT 128
  11494.  dc.b val
  11495. val SET val+1
  11496.  ENDR 
  11497.  
  11498. tab:
  11499.  ds.b 256*65
  11500.  
  11501.  
  11502. test: dc.l 0
  11503.  ds.l 30
  11504.  
  11505.  even
  11506. ConstCols:
  11507. ; incbin "ConstCols"
  11508.  even
  11509. Smoothscalecols:
  11510. ; incbin "smoothbumppalscaled"
  11511.  even
  11512. SmoothTile:
  11513. ; incbin "smoothbumptile"
  11514.  even
  11515. Bumpscalecols:
  11516. ; incbin "Bumppalscaled"
  11517.  even
  11518. Bumptile:
  11519. ; incbin "bumptile"
  11520.  even
  11521. scalecols: ;incbin "bytepixpalscaled"
  11522.  even
  11523. floorscalecols:
  11524.  incbin "floor256pal"
  11525.  ds.w 256*4
  11526.  
  11527.  even
  11528. PaletteAddr: dc.l 0
  11529. ChunkAddr: dc.l 0
  11530. ;walltiles:
  11531. ; dc.l GreenMechanicWALL
  11532. ; dc.l BlueGreyMetalWALL
  11533. ; dc.l TechnoDetailWALL
  11534. ; dc.l BlueStoneWALL
  11535. ; dc.l RedAlertWALL
  11536. ; dc.l RockWALL
  11537. ;
  11538. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  11539. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  11540. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  11541. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  11542. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  11543. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  11544.  
  11545. floortile:
  11546.  dc.l 0
  11547. ; incbin "floortile" 
  11548.  even
  11549. wallrouts:
  11550. ; incbin "2x2WallDraw" 
  11551.  CNOP 0,64
  11552. BackPicture:
  11553.  incbin "rawback"
  11554. EndBackPicture:
  11555.  
  11556. drawpt: dc.l 0
  11557. olddrawpt: dc.l 0
  11558. frompt: dc.l 0 
  11559.  
  11560. SineTable:
  11561.  incbin "bigsine"
  11562.  
  11563. angspd: dc.w 0
  11564. flooryoff: dc.w 0
  11565. xoff: dc.l 0
  11566. yoff: dc.l 0
  11567. yvel: dc.l 0
  11568. zoff: dc.l 0
  11569. tyoff: dc.l 0
  11570. xspdval: dc.l 0
  11571. zspdval: dc.l 0
  11572. Zone: dc.w 0
  11573.  
  11574. PLR1: dc.b $ff
  11575.  even
  11576. PLR1_energy: dc.w 191
  11577. PLR1_GunSelected: dc.w 0
  11578. PLR1_cosval: dc.w 0
  11579. PLR1_sinval: dc.w 0
  11580. PLR1_angpos: dc.w 0
  11581. PLR1_angspd: dc.w 0
  11582. PLR1_xoff: dc.l 0
  11583. PLR1_yoff: dc.l 0
  11584. PLR1_yvel: dc.l 0
  11585. PLR1_zoff: dc.l 0
  11586. PLR1_tyoff: dc.l 0
  11587. PLR1_xspdval: dc.l 0
  11588. PLR1_zspdval: dc.l 0
  11589. PLR1_Zone: dc.w 0
  11590. PLR1_Roompt: dc.l 0
  11591. PLR1_OldRoompt: dc.l 0
  11592. PLR1_PointsToRotatePtr: dc.l 0
  11593. PLR1_ListOfGraphRooms: dc.l 0
  11594. PLR1_oldxoff: dc.l 0
  11595. PLR1_oldzoff: dc.l 0
  11596. PLR1_StoodInTop: dc.b 0
  11597.  even
  11598. PLR1_height: dc.l 0
  11599. PLR1_RoomBright: dc.w 0
  11600.  
  11601. DOUBLEWIDTH: dc.b $0,0
  11602. DOUBLEHEIGHT: dc.b 0,0
  11603. PLR1_TELEPORTED: dc.w 0
  11604.  
  11605.  ds.w 4
  11606.  
  11607. OLDX1: dc.l 0
  11608. OLDX2: dc.l 0
  11609. OLDZ1: dc.l 0
  11610. OLDZ2: dc.l 0
  11611.  
  11612. XDIFF1: dc.l 0
  11613. ZDIFF1: dc.l 0
  11614. XDIFF2: dc.l 0
  11615. ZDIFF2: dc.l 0
  11616.  
  11617. PLR1s_cosval: dc.w 0
  11618. PLR1s_sinval: dc.w 0
  11619. PLR1s_angpos: dc.w 0
  11620. PLR1s_angspd: dc.w 0
  11621. PLR1s_xoff: dc.l 0
  11622. PLR1s_yoff: dc.l 0
  11623. PLR1s_yvel: dc.l 0
  11624. PLR1s_zoff: dc.l 0
  11625. PLR1s_tyoff: dc.l 0
  11626. PLR1s_xspdval: dc.l 0
  11627. PLR1s_zspdval: dc.l 0
  11628. PLR1s_Zone: dc.w 0
  11629. PLR1s_Roompt: dc.l 0
  11630. PLR1s_OldRoompt: dc.l 0
  11631. PLR1s_PointsToRotatePtr: dc.l 0
  11632. PLR1s_ListOfGraphRooms: dc.l 0
  11633. PLR1s_oldxoff: dc.l 0
  11634. PLR1s_oldzoff: dc.l 0
  11635. PLR1s_height: dc.l 0
  11636. PLR1s_targheight: dc.l 0
  11637.  
  11638. p1_xoff: dc.l 0
  11639. p1_zoff: dc.l 0
  11640. p1_yoff: dc.l 0
  11641. p1_height: dc.l 0
  11642. p1_angpos: dc.w 0
  11643. p1_bobble: dc.w 0
  11644. p1_clicked: dc.b 0
  11645. p1_spctap: dc.b 0
  11646. p1_ducked: dc.b 0
  11647. p1_gunselected: dc.b 0
  11648. p1_fire: dc.b 0
  11649.  even
  11650. p1_holddown: dc.w 0
  11651.  
  11652.  ds.w 4
  11653.  
  11654. PLR2: dc.b $ff
  11655.  even
  11656. PLR2_GunSelected: dc.w 0
  11657. PLR2_energy: dc.w 191
  11658. PLR2_cosval: dc.w 0
  11659. PLR2_sinval: dc.w 0
  11660. PLR2_angpos: dc.w 0
  11661. PLR2_angspd: dc.w 0
  11662. PLR2_xoff: dc.l 0
  11663. PLR2_yoff: dc.l 0
  11664. PLR2_yvel: dc.l 0
  11665. PLR2_zoff: dc.l 0
  11666. PLR2_tyoff: dc.l 0
  11667. PLR2_xspdval: dc.l 0
  11668. PLR2_zspdval: dc.l 0
  11669. PLR2_Zone: dc.w 0
  11670. PLR2_Roompt: dc.l 0
  11671. PLR2_OldRoompt: dc.l 0
  11672. PLR2_PointsToRotatePtr: dc.l 0
  11673. PLR2_ListOfGraphRooms: dc.l 0
  11674. PLR2_oldxoff: dc.l 0
  11675. PLR2_oldzoff: dc.l 0
  11676. PLR2_StoodInTop: dc.b 0
  11677.  even
  11678. PLR2_height: dc.l 0
  11679.  
  11680.  ds.w 4
  11681.  
  11682. PLR2s_cosval: dc.w 0
  11683. PLR2s_sinval: dc.w 0
  11684. PLR2s_angpos: dc.w 0
  11685. PLR2s_angspd: dc.w 0
  11686. PLR2s_xoff: dc.l 0
  11687. PLR2s_yoff: dc.l 0
  11688. PLR2s_yvel: dc.l 0
  11689. PLR2s_zoff: dc.l 0
  11690. PLR2s_tyoff: dc.l 0
  11691. PLR2s_xspdval: dc.l 0
  11692. PLR2s_zspdval: dc.l 0
  11693. PLR2s_Zone: dc.w 0
  11694. PLR2s_Roompt: dc.l 0
  11695. PLR2s_OldRoompt: dc.l 0
  11696. PLR2s_PointsToRotatePtr: dc.l 0
  11697. PLR2s_ListOfGraphRooms: dc.l 0
  11698. PLR2s_oldxoff: dc.l 0
  11699. PLR2s_oldzoff: dc.l 0
  11700. PLR2s_height: dc.l 0
  11701. PLR2s_targheight: dc.l 0
  11702.  
  11703.  ds.w 4
  11704.  
  11705. p2_xoff: dc.l 0
  11706. p2_zoff: dc.l 0
  11707. p2_yoff: dc.l 0
  11708. p2_height: dc.l 0
  11709. p2_angpos: dc.w 0
  11710. p2_bobble: dc.w 0
  11711. p2_clicked: dc.b 0
  11712. p2_spctap: dc.b 0
  11713. p2_ducked: dc.b 0
  11714. p2_gunselected: dc.b 0
  11715. p2_fire: dc.b 0
  11716.  even
  11717. p2_holddown: dc.w 0
  11718.  
  11719. liftanimtab:
  11720.  
  11721. endliftanimtab:
  11722.  
  11723. glassball:
  11724. ; incbin "glassball.inc"
  11725.  
  11726. endglass
  11727. glassballpt: dc.l glassball
  11728.  
  11729. rndtab: ; incbin "randfile"
  11730. endrnd: 
  11731.  
  11732. brightanimtab:
  11733.  dcb.w 200,20
  11734.  dc.w 5
  11735.  dc.w 10,20
  11736.  dc.w 5
  11737.  dcb.w 30,20
  11738.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  11739.  dcb.w 40,0
  11740.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  11741.  dcb.w 300,0
  11742.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  11743.  dc.w -1
  11744.  
  11745. Roompt: dc.l 0
  11746. OldRoompt: dc.l 0
  11747.  
  11748. *****************************************************************
  11749.  *
  11750.  include "AB3:source_4000/LevelData2"
  11751.  *
  11752. *****************************************************************
  11753.  
  11754.  
  11755. wallpt: dc.l 0
  11756. floorpt: dc.l 0
  11757.  
  11758. Rotated:
  11759.  ds.l 2*800 
  11760. ObjRotated:
  11761.  ds.l 2*500
  11762.  
  11763. OnScreen:
  11764.  ds.l 2*800 
  11765.  
  11766. startwait: dc.w 0
  11767. endwait: dc.w 0
  11768.  
  11769. Faces:; incbin "faces2raw"
  11770.  
  11771. LINKS: ds.b 10000
  11772. FLYLINKS: ds.b 10000
  11773. *******************************************************************
  11774.  
  11775. consttab:
  11776.  incbin "constantfile"
  11777.  
  11778. *******************************************************************
  11779.  
  11780.  
  11781.  
  11782. *********************************
  11783.  
  11784. ; include "ab3:source_4000/loadmod.a"
  11785. ; include "ab3:source_4000/proplayer.a"
  11786.  
  11787.  
  11788. darkentab: 
  11789. ;val SET 0
  11790. ; REPT 256
  11791. ; dc.b val
  11792. ;val SET val+1
  11793. ; ENDR
  11794.  incbin "darkenfile"
  11795.  
  11796. MIDDLEX: dc.w 0
  11797. RIGHTX: dc.w 192
  11798. FULLSCR: dc.w 0
  11799.  
  11800. SHADINGTABLE: incbin "SHADEFILE" 
  11801.  
  11802. ******************************************
  11803. * Link file !*****************************
  11804. ******************************************
  11805.  
  11806. LINKSPACE:
  11807.  ds.l 22500
  11808. ; incbin "ab3:includes/test.lnk"
  11809.  
  11810. LINKname:
  11811.  dc.b "ab3:includes/test.lnk",0
  11812.  
  11813. LINKFILE:
  11814.  dc.l LINKSPACE
  11815.  
  11816. ******************************************
  11817.  
  11818.  
  11819. brightentab: incbin "brightenfile"
  11820. WorkSpace:
  11821.  ds.l 8192 
  11822. waterfile: incbin "waterfile"
  11823.  
  11824.  SECTION ffff,CODE_C
  11825.  
  11826. nullspr: dc.l 0
  11827.  
  11828.  cnop 0,8
  11829. borders:
  11830.  incbin "newleftbord"
  11831.  incbin "newrightbord"
  11832.  
  11833. health: incbin "healthstrip"
  11834. Ammunition: incbin "ammostrip"
  11835. healthpal: incbin "healthpal"
  11836. PanelKeys: incbin "greenkey"
  11837.  incbin "redkey"
  11838.  incbin "yellowkey"
  11839.  incbin "bluekey"
  11840.  
  11841. null: ds.w 500
  11842. null2: ds.w 500
  11843. null3: ds.w 500
  11844. null4: ds.w 500
  11845.  
  11846.  
  11847. Blurbfield:
  11848.  
  11849.  dc.w bpl1ptl
  11850. bl1l: dc.w 0
  11851.  dc.w bpl1pth
  11852. bl1h: dc.w 0
  11853.  
  11854.  dc.w diwstart,$2c81
  11855.  dc.w diwstop,$1cc1
  11856.  dc.w ddfstart,$38
  11857.  dc.w ddfstop,$b8
  11858.  dc.w bplcon0,$9201
  11859.  dc.w bplcon1,0
  11860.  dc.w $106,$c40
  11861. blcols:
  11862.  dc.w col0,0
  11863.  dc.w col1,$fff
  11864.  
  11865.  dc.w $108,0
  11866.  dc.w $10a,0
  11867.  
  11868.  dc.w $ffff,$fffe
  11869.  dc.w $ffff,$fffe
  11870.  
  11871. nullline:
  11872.  ds.b 80    
  11873.  
  11874.  include "ab3:source_4000/titlecop.s"
  11875.  
  11876. bigfield:    
  11877.                 ; Start of our copper list.
  11878.  dc.w dmacon,$8020
  11879.  dc.w intreq,$8011
  11880.  dc.w $1fc,$f
  11881.  dc.w diwstart
  11882. winstart: dc.w $2c81
  11883.  dc.w diwstop
  11884. winstop: dc.w $2cc1
  11885.  dc.w ddfstart
  11886. fetchstart: dc.w $38
  11887.  dc.w ddfstop
  11888. fetchstop: dc.w $b8
  11889.  
  11890. bordercols:
  11891.  incbin "borderpal"
  11892.  
  11893.  dc.w spr0ptl
  11894. s0l:
  11895.  dc.w 0
  11896.  dc.w spr0pth
  11897. s0h:
  11898.  dc.w 0
  11899.  dc.w spr1ptl
  11900. s1l:
  11901.  dc.w 0
  11902.  dc.w spr1pth
  11903. s1h:
  11904.  dc.w 0
  11905.  dc.w spr2ptl
  11906. s2l:
  11907.  dc.w 0
  11908.  dc.w spr2pth
  11909. s2h:
  11910.  dc.w 0
  11911.  dc.w spr3ptl
  11912. s3l:
  11913.  dc.w 0
  11914.  dc.w spr3pth
  11915. s3h:
  11916.  dc.w 0
  11917.  dc.w spr4ptl
  11918. s4l:
  11919.  dc.w 0
  11920.  dc.w spr4pth
  11921. s4h:
  11922.  dc.w 0
  11923.  dc.w spr5ptl
  11924. s5l:
  11925.  dc.w 0
  11926.  dc.w spr5pth
  11927. s5h:
  11928.  dc.w 0
  11929.  dc.w spr6ptl
  11930. s6l:
  11931.  dc.w 0
  11932.  dc.w spr6pth
  11933. s6h:
  11934.  dc.w 0
  11935.  dc.w spr7ptl
  11936. s7l:
  11937.  dc.w 0
  11938.  dc.w spr7pth
  11939. s7h:
  11940.  dc.w 0
  11941.  
  11942. ; dc.w $106,$c42
  11943. ; incbin "borderpal"
  11944.  
  11945.  dc.w $106,$c42
  11946.  
  11947.  dc.w bplcon0,$0211
  11948.  dc.w bplcon1
  11949. smoff:
  11950.  dc.w $0
  11951.  
  11952.  dc.w $108
  11953. modulo: dc.w 0
  11954.  dc.w $10a,0
  11955.  
  11956.  dc.w $1001,$ff00
  11957.  dc.w intreq,$11
  11958.  
  11959. PALETTESPACE:
  11960.  dcb.l 528,$1fe0000
  11961.  
  11962.  dc.w $2001,$ff00
  11963.  
  11964.  dc.w bpl1pth
  11965. pl1h
  11966.  dc.w 0
  11967.  
  11968.  dc.w bpl1ptl
  11969. pl1l
  11970.  dc.w 0
  11971.  
  11972.  dc.w bpl2pth
  11973. pl2h
  11974.  dc.w 0
  11975.  
  11976.  dc.w bpl2ptl
  11977. pl2l
  11978.  dc.w 0
  11979.  
  11980.  dc.w bpl3pth
  11981. pl3h
  11982.  dc.w 0
  11983.  
  11984.  dc.w bpl3ptl
  11985. pl3l
  11986.  dc.w 0
  11987.  
  11988.  dc.w bpl4pth
  11989. pl4h
  11990.  dc.w 0
  11991.  
  11992.  dc.w bpl4ptl
  11993. pl4l
  11994.  dc.w 0
  11995.  
  11996.  dc.w bpl5pth
  11997. pl5h
  11998.  dc.w 0
  11999.  
  12000.  dc.w bpl5ptl
  12001. pl5l
  12002.  dc.w 0
  12003.  
  12004.  dc.w bpl6pth
  12005. pl6h
  12006.  dc.w 0
  12007.  
  12008.  dc.w bpl6ptl
  12009. pl6l
  12010.  dc.w 0
  12011.  
  12012.  dc.w bpl7pth
  12013. pl7h
  12014.  dc.w 0
  12015.  
  12016.  dc.w bpl7ptl
  12017. pl7l
  12018.  dc.w 0
  12019.  
  12020.  dc.w bpl8pth
  12021. pl8h
  12022.  dc.w 0
  12023.  
  12024.  dc.w bpl8ptl
  12025. pl8l
  12026.  dc.w 0
  12027.  
  12028.  
  12029. val SET $2c
  12030. SCRMODULOS:
  12031.  REPT 232
  12032.  dc.b val,1,$ff,$fe
  12033.  dc.w $108,0
  12034.  dc.w $10a,0
  12035.  dc.b val,$df,$ff,$fe
  12036. val SET (val+1)&$ff
  12037.  ENDR
  12038.  
  12039.  dc.w $108,0,$10a,0
  12040.  dc.w $2401,$ff00
  12041.  dc.w ddfstop,$c8
  12042.  dc.w bplcon0,$9201
  12043.  dc.w bpl1ptl
  12044. scroll:
  12045.  dc.w 0
  12046.  dc.w bpl1pth
  12047. scrolh:
  12048.  dc.w 0
  12049.  
  12050.  dc.w $106,$c40
  12051.  dc.w $180,0
  12052.  dc.w $182,$f0
  12053. ; dc.w $108,40
  12054. ; dc.w $10a,40
  12055.  
  12056. ; dc.w $80
  12057. ;JUMPBACKH:
  12058. ; dc.w 0
  12059. ; dc.w $82
  12060. ;JUMPBACKL:
  12061. ; dc.w 0
  12062.  
  12063. ; dc.w $8a,0
  12064.  
  12065.  dc.w $ffff,$fffe
  12066.  dc.w $ffff,$fffe
  12067.  
  12068.  
  12069. COPIEDPAL:
  12070.  dc.w 256,0
  12071.  ds.l 3*256
  12072.  ds.l 10
  12073.  
  12074. PALETTEBIT:
  12075. ; incbin "256palette"
  12076. ; dc.w $ffff,$fffe
  12077.  
  12078.  
  12079.  incbin "ab3:includes/256pal"
  12080.  
  12081.  
  12082. yposcop:
  12083. ; dc.w $2a11,$fffe
  12084. ; dc.w $8a,0
  12085.  
  12086. ; ds.l 104*12
  12087.  
  12088. ;colbars:
  12089. ;val SET $2a
  12090. ; dcb.l 104*80,$1fe0000
  12091. ; dc.w $106,$c42
  12092. ; dc.w $80
  12093. ;pch1:
  12094. ; dc.w 0
  12095. ; dc.w $82
  12096. ;pcl1:
  12097. ; dc.w 0 
  12098. ; dc.w $88,0
  12099. ; dc.w $ffff,$fffe       ; End copper list.
  12100.  
  12101. ; ds.l 104*12
  12102.  
  12103.  
  12104. ;colbars2:
  12105. ;val SET $2a
  12106. ; dcb.l 104*80,$1fe0000
  12107. ; dc.w $106,$c42
  12108. ; dc.w $80
  12109. ;pch2:
  12110. ; dc.w 0
  12111. ; dc.w $82
  12112. ;pcl2:
  12113. ; dc.w 0
  12114. ; dc.w $88,0
  12115. ; dc.w $ffff,$fffe       ; End copper list.
  12116.  
  12117. ; ds.l 104*10
  12118.  
  12119. NullCopper:
  12120.  dc.w $ffff,$fffe
  12121.  
  12122. hitcol: dc.l 0
  12123.  
  12124. old: dc.l 0
  12125.  
  12126.  CNOP 0,64
  12127. SCROLLSCRN: ds.l 20*16
  12128.  
  12129. SCROLLOFFSET: dc.w 0
  12130. SCROLLTIMER: dc.w 100
  12131. SCROLLDIRECTION: dc.w 1
  12132. SCROLLXPOS: dc.w 0
  12133. SCROLLPOINTER: dc.l testscroll
  12134. ENDSCROLL: dc.l endtestscroll
  12135.  
  12136. testscroll:
  12137. ;      12345678901234567890123456789012345678901234567890123456789012345678901234567890
  12138. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  12139. ; dc.b "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ                            "
  12140. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  12141.  
  12142. BLANKSCROLL:
  12143.  dc.b "                                                                                "
  12144. endtestscroll: 
  12145.  
  12146. prot5: dc.w 0
  12147. PanelCop:
  12148.  
  12149.  dc.w $80
  12150. och:
  12151.  dc.w 0
  12152.  dc.w $82
  12153. ocl:
  12154.  dc.w 0
  12155.  
  12156. statskip:
  12157.  dc.w $1fe,0
  12158.  dc.w $1fe,0
  12159.  
  12160.  dc.w $10c,0
  12161.  dc.w bplcon0,$1201
  12162.  dc.w bpl1ptl
  12163. n1l:
  12164.  dc.w 0
  12165.  dc.w bpl1pth
  12166. n1h:
  12167.  dc.w 0
  12168.  dc.w $108,-24
  12169.  incbin "Panelpal"
  12170.  
  12171.  dc.w bpl2pth
  12172. p2h
  12173.  dc.w 0
  12174.  
  12175.  dc.w bpl2ptl
  12176. p2l
  12177.  dc.w 0
  12178.  
  12179.  dc.w bpl3pth
  12180. p3h
  12181.  dc.w 0
  12182.  
  12183.  dc.w bpl3ptl
  12184. p3l
  12185.  dc.w 0
  12186.  
  12187.  dc.w bpl4pth
  12188. p4h
  12189.  dc.w 0
  12190.  dc.w bpl4ptl
  12191. p4l
  12192.  dc.w 0
  12193.  dc.w bpl5pth
  12194. p5h
  12195.  dc.w 0
  12196.  dc.w bpl5ptl
  12197. p5l
  12198.  dc.w 0
  12199.  dc.w bpl6pth
  12200. p6h
  12201.  dc.w 0
  12202.  dc.w bpl6ptl
  12203. p6l
  12204.  dc.w 0
  12205.  dc.w bpl7pth
  12206. p7h
  12207.  dc.w 0
  12208.  dc.w bpl7ptl
  12209. p7l
  12210.  dc.w 0
  12211.  dc.w bpl8pth
  12212. p8h
  12213.  dc.w 0
  12214.  dc.w bpl8ptl
  12215. p8l
  12216.  dc.w 0
  12217.  
  12218.  
  12219.  dc.w ddfstart,$38
  12220.  dc.w ddfstop,$b8
  12221.  dc.w diwstart,$2c81
  12222.  dc.w diwstop,$2cc1
  12223.  
  12224.  dc.w bplcon0
  12225. Panelcon: dc.w $0211
  12226.  dc.w bpl1pth
  12227. p1h
  12228.  dc.w 0
  12229.  
  12230.  dc.w bpl1ptl
  12231. p1l
  12232.  dc.w 0
  12233.  
  12234.  
  12235.  dc.w $108,40*7
  12236.  dc.w $10a,40*7
  12237.  
  12238.  dc.w $ffff,$fffe
  12239.  
  12240.  dc.w $180,$fff
  12241.  
  12242.  
  12243.  dc.w $f801,$ff00
  12244.  dc.w col1,$50
  12245.  dc.w $f901,$ff00
  12246.  dc.w col1,$90
  12247.  dc.w $fa01,$ff00
  12248.  dc.w col1,$f0
  12249.  dc.w $fb01,$ff00
  12250.  dc.w col1,$f0
  12251.  dc.w $fc01,$ff00
  12252.  dc.w col1,$90
  12253.  dc.w $fd01,$ff00
  12254.  dc.w col1,$50
  12255.  
  12256.  dc.w $fe01,$ff00
  12257.  dc.w col1,$fff
  12258.  
  12259.  dc.w $ffdf,$fffe
  12260.  dc.w $a01,$ff00
  12261.  dc.w bplcon0,$201
  12262.  
  12263.  incbin "faces2cols"
  12264.  dc.w bpl1pth
  12265. f1h
  12266.  dc.w 0
  12267.  
  12268.  dc.w bpl1ptl
  12269. f1l
  12270.  dc.w 0
  12271.  
  12272.  dc.w bpl2pth
  12273. f2h
  12274.  dc.w 0
  12275.  
  12276.  dc.w bpl2ptl
  12277. f2l
  12278.  dc.w 0
  12279.  
  12280.  dc.w bpl3pth
  12281. f3h
  12282.  dc.w 0
  12283.  
  12284.  dc.w bpl3ptl
  12285. f3l
  12286.  dc.w 0
  12287.  
  12288.  dc.w bpl4pth
  12289. f4h
  12290.  dc.w 0
  12291.  dc.w bpl4ptl
  12292. f4l
  12293.  dc.w 0
  12294.  
  12295.  dc.w bpl5pth
  12296. f5h
  12297.  dc.w 0
  12298.  dc.w bpl5ptl
  12299. f5l
  12300.  dc.w 0
  12301.  
  12302.  dc.w $0c01,$ff00
  12303.  dc.w bplcon0,$5201
  12304.   
  12305.  dc.w $ffff,$fffe
  12306.  
  12307.  cnop 0,64
  12308. FacePlace:
  12309. ; ds.l 6*32*5
  12310.  
  12311. TEXTSCRN: dc.l 0
  12312.  
  12313. TEXTCOP:
  12314.  dc.w intreq,$8030
  12315.  
  12316.  dc.w spr0ptl
  12317. txs0l:
  12318.  dc.w 0
  12319.  dc.w spr0pth
  12320. txs0h:
  12321.  dc.w 0
  12322.  dc.w spr1ptl
  12323. txs1l:
  12324.  dc.w 0
  12325.  dc.w spr1pth
  12326. txs1h:
  12327.  dc.w 0
  12328.  dc.w spr2ptl
  12329. txs2l:
  12330.  dc.w 0
  12331.  dc.w spr2pth
  12332. txs2h:
  12333.  dc.w 0
  12334.  dc.w spr3ptl
  12335. txs3l:
  12336.  dc.w 0
  12337.  dc.w spr3pth
  12338. txs3h:
  12339.  dc.w 0
  12340.  dc.w spr4ptl
  12341. txs4l:
  12342.  dc.w 0
  12343.  dc.w spr4pth
  12344. txs4h:
  12345.  dc.w 0
  12346.  dc.w spr5ptl
  12347. txs5l:
  12348.  dc.w 0
  12349.  dc.w spr5pth
  12350. txs5h:
  12351.  dc.w 0
  12352.  dc.w spr6ptl
  12353. txs6l:
  12354.  dc.w 0
  12355.  dc.w spr6pth
  12356. txs6h:
  12357.  dc.w 0
  12358.  dc.w spr7ptl
  12359. txs7l:
  12360.  dc.w 0
  12361.  dc.w spr7pth
  12362. txs7h:
  12363.  dc.w 0
  12364.  
  12365.  
  12366.  dc.w $10c,$0088
  12367.  
  12368.  dc.w $1fc,$f
  12369.  dc.w diwstart,$2c81    ; Top left corner of screen.
  12370.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  12371.  dc.w ddfstart,$38      ; Data fetch start.
  12372.  dc.w ddfstop,$c8       ; Data fetch stop.
  12373.  
  12374.  dc.w bplcon0
  12375. TSCP:
  12376.  dc.w $9201
  12377.  
  12378.  dc.w $106,$c40
  12379.  
  12380.  dc.w $2a01,$ff00
  12381.  
  12382.  dc.w col0,0
  12383.  dc.w col1
  12384. TOPLET:
  12385. TXTCOLL:
  12386.  dc.w 0
  12387.   dc.w col2
  12388. BOTLET:
  12389.  dc.w 0
  12390.  dc.w col3
  12391. ALLTEXT:
  12392.  dc.w $fff
  12393.  dc.w $106,$e40
  12394.  dc.w col3
  12395. ALLTEXTLOW:
  12396.  dc.w $0
  12397.  
  12398.  
  12399.  dc.w bpl1pth
  12400. TSPTh:
  12401.  dc.w 0
  12402.  dc.w bpl1ptl
  12403. TSPTl:
  12404.  dc.w 0
  12405.  
  12406.  dc.w bpl2pth
  12407. TSPTh2:
  12408.  dc.w 0
  12409.  dc.w bpl2ptl
  12410. TSPTl2:
  12411.  dc.w 0
  12412.  
  12413.  
  12414.  dc.w $108,0
  12415.  dc.w $10a,0
  12416.  
  12417.  dc.w $ffff,$fffe
  12418.  
  12419. ********************************************
  12420. * Stuff you don't have to worry about yet. *
  12421. ********************************************
  12422.  
  12423. closeeverything:
  12424.  
  12425.  jsr mt_end
  12426.  
  12427.  move.l #nullcop,d0
  12428. ; move.l old,d0
  12429.  
  12430.  
  12431. ;charlie  
  12432.  move.l d0,$dff080     ; Restore old copper list.
  12433.  move.w d0,ocl
  12434.  swap d0
  12435.  move.w d0,och
  12436.  
  12437. ; move.l doslib,a6
  12438. ; move.l #4,d1
  12439. ; jsr -198(a6)
  12440.  
  12441. ; move.l doslib,d0
  12442. ; move.l d0,a1
  12443. ; move.l 4.w,a6
  12444. ; jsr CloseLib(a6)
  12445.  
  12446.  move.l #$dff000,a6
  12447.  move.w #$8020,dmacon(a6)
  12448.  move.w #$f,dmacon(a6)
  12449.  
  12450. ; move.l 4.w,a6
  12451. ; lea VBLANKInt,a1
  12452. ; moveq #INTB_COPER,d0
  12453. ; jsr _LVORemIntServer(a6)
  12454.  
  12455. ; IFEQ CD32VER
  12456. ; move.l OLDKINT,$68.w
  12457. ; ENDC
  12458. ; move.w saveinters,d0
  12459. ; or.w #$c000,d0
  12460. ; move.w d0,intena(a6)
  12461.  clr.w $dff0a8
  12462.  clr.w $dff0b8
  12463.  clr.w $dff0c8
  12464.  clr.w $dff0d8
  12465.  
  12466.  
  12467. ; move.l oldview,a1
  12468. ; move.l a1,d0
  12469. ; move.l gfxbase,a6
  12470. ; jsr -$de(a6)
  12471.  
  12472. ; cmp.b #'s',mors
  12473. ; beq.s leaveold
  12474. ; move.w #$f8e,$dff1dc
  12475. ;leaveold:
  12476.  
  12477.  jsr RELEASELEVELMEM
  12478.  jsr RELEASESCRNMEM
  12479.  
  12480.  move.l #0,d0
  12481.  
  12482.  rts
  12483.  
  12484.  
  12485.  
  12486. intbase: dc.l 0
  12487. gfxbase: dc.l 0
  12488. oldview: dc.l 0
  12489.  
  12490. stuff:
  12491.  
  12492.     PRSDL
  12493.     Lea    gfxname(pc),a1    
  12494.     Moveq.l    #0,d0
  12495.     Move.l    $4.w,a6    
  12496.     Jsr    -$228(a6)
  12497.     add.w d1,RVAL1
  12498.     Move.l     d0,gfxbase
  12499.     Move.l    d0,a6                Use As Base Reg
  12500.     Move.l    34(a6),oldview
  12501.     move.l 38(a6),old
  12502.     rts
  12503.  
  12504. gfxname dc.b "graphics.library",0
  12505.  even
  12506. INTUNAME    dc.b    "intuition.library",0
  12507.  
  12508.  even
  12509.  
  12510.  
  12511.  cnop 0,64
  12512.  
  12513. Panel:
  12514.  dc.l 0
  12515.  
  12516. TimerScr: 
  12517. ;ds.b 40*64
  12518.  
  12519. scrntab:
  12520.  ds.b 16
  12521. val SET 32
  12522.  REPT 96
  12523.  dc.b val,val,val
  12524. val SET val+1
  12525.  ENDR
  12526.  ds.b 16
  12527.  
  12528. smallscrntab:
  12529. val SET 32
  12530.  REPT 96
  12531.  dc.b val,val
  12532. val SET val+1
  12533.  ENDR
  12534.  
  12535.  cnop 0,64
  12536. scrn:
  12537.  incbin "ab3:includes/newborderRAW"
  12538.  ds.b 80
  12539. scrn2:
  12540.  incbin "ab3:includes/newborderRAW"
  12541.  ds.b 80
  12542.  
  12543.  
  12544.  dcb.l 8,$33333333
  12545.  dc.l 0
  12546.  dc.l 0
  12547.  
  12548.  dcb.l 8,$0f0f0f0f
  12549.  dc.l 0
  12550.  dc.l 0
  12551.  
  12552.  dcb.l 8,$00ff00ff
  12553.  dc.l 0
  12554.  dc.l 0
  12555.  
  12556.  dcb.l 8,$0000ffff
  12557.  dc.l 0
  12558.  dc.l 0
  12559.  
  12560.  dc.l 0,-1,0,-1,0,-1,0,-1
  12561.  dc.l 0
  12562.  dc.l 0
  12563.  
  12564.  dc.l -1,-1,0,0,-1,-1,0,0
  12565.  dc.l 0
  12566.  dc.l 0
  12567.  
  12568.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  12569.  dc.l 0
  12570.  dc.l 0
  12571.  
  12572. NumTimes: dc.l 0
  12573. TimeCount: dc.l 0
  12574. oldtime: dc.l 0
  12575. counting: dc.b 0
  12576. oktodisplay: dc.b 0
  12577.  
  12578. INITTIMER:
  12579.  move.l #0,TimeCount
  12580.  move.l #0,NumTimes
  12581.  rts
  12582.  
  12583. STARTCOUNT:
  12584.  move.l d0,-(a7)
  12585.  move.l $dff004,d0
  12586.  and.l #$1ffff,d0
  12587.  move.l d0,oldtime
  12588.  st counting
  12589.  move.l (a7)+,d0
  12590.  rts
  12591.  
  12592. STOPCOUNT:
  12593.  move.l d0,-(a7)
  12594.  move.l $dff004,d0
  12595.  and.l #$1ffff,d0
  12596.  
  12597.  sub.l oldtime,d0
  12598.  cmp.l #-256,d0
  12599.  bge.s okcount
  12600.  add.l #313*256,d0
  12601. okcount:
  12602.  add.l d0,TimeCount
  12603.  addq.l #1,NumTimes
  12604.  clr.b counting
  12605.  move.l (a7)+,d0
  12606.  rts
  12607.  
  12608. STOPCOUNTNOADD:
  12609.  move.l d0,-(a7)
  12610.  move.l $dff004,d0
  12611.  and.l #$1ffff,d0
  12612.  
  12613.  sub.l oldtime,d0
  12614.  cmp.l #-256,d0
  12615.  bge.s okcount2
  12616.  add.l #313*256,d0
  12617. okcount2:
  12618.  add.l d0,TimeCount
  12619.  clr.b counting
  12620.  move.l (a7)+,d0
  12621.  rts
  12622.  
  12623. maxbot: dc.w 0
  12624. tstneg: dc.l 0
  12625.  
  12626. STOPTIMER:
  12627.  st oktodisplay
  12628.  rts
  12629.  
  12630. digits: incbin "numbers.inc"
  12631.  
  12632. COMPACTMAP: ds.l 257
  12633.  
  12634. BIGMAP: ds.l 256*10
  12635.  
  12636.  Section Sounds,CODE_C
  12637.  
  12638. nullcop:
  12639.  dc.w $106,$c40
  12640.  dc.w $180,0 
  12641.  dc.w $100,$0
  12642.  dc.w $ffff,$fffe
  12643.  
  12644. Scream:
  12645. ; incbin "ab3:sounds/Scream"
  12646. ; ds.w 100
  12647. EndScream:
  12648. LowScream:
  12649. ; incbin "ab3:sounds/LowScream"
  12650. ; ds.w 100
  12651. EndLowScream:
  12652. BaddieGun:
  12653. ; incbin "ab3:sounds/BaddieGun"
  12654. EndBaddieGun:
  12655. bass:
  12656. ; incbin "ab3:sounds/backbass+drum"
  12657. bassend:
  12658. Shoot:
  12659. ; incbin "ab3:sounds/fire!"
  12660. EndShoot:
  12661. Munch:
  12662. ; incbin "ab3:sounds/munch"
  12663. EndMunch:
  12664. PooGun:
  12665. ; incbin "ab3:sounds/shoot.dm"
  12666. EndPooGun:
  12667. Collect:
  12668. ; incbin "ab3:sounds/collect"
  12669. EndCollect:
  12670. DoorNoise:
  12671. ; incbin "ab3:sounds/newdoor"
  12672. EndDoorNoise:
  12673. Stomp:
  12674. ; incbin "ab3:sounds/footstep3"
  12675. EndStomp:
  12676. SwitchNoise:
  12677. ; incbin "ab3:sounds/switch"
  12678. EndSwitch:
  12679. Reload:
  12680. ; incbin "ab3:sounds/switch1.SFX"
  12681. EndReload:
  12682.  
  12683. CHEATFRAME:
  12684.  dc.b 26,20,33,27,17,12
  12685. ENDCHEAT:
  12686.  
  12687. NoAmmo:
  12688. ; incbin "ab3:sounds/noammo"
  12689. EndNoAmmo:
  12690. Splotch:
  12691. ; incbin "ab3:sounds/splotch"
  12692. EndSplotch:
  12693. SplatPop:
  12694. ; incbin "ab3:sounds/splatpop"
  12695. EndSplatPop:
  12696. Boom:
  12697. ; incbin "ab3:sounds/boom"
  12698. EndBoom:
  12699. Hiss:
  12700. ; incbin "ab3:sounds/newhiss"
  12701. EndHiss:
  12702. Howl1:
  12703. ; incbin "ab3:sounds/howl1"
  12704. EndHowl1:
  12705. Howl2:
  12706. ; incbin "ab3:sounds/howl2"
  12707. EndHowl2:
  12708. Pant:
  12709. ; incbin "ab3:sounds/pant"
  12710. EndPant:
  12711. Whoosh:
  12712. ; incbin "ab3:sounds/whoosh"
  12713. EndWhoosh:
  12714. ROAR:
  12715. ; incbin "ab3:sounds/bigscream"
  12716. EndROAR
  12717. whoosh:
  12718. ; incbin "ab3:sounds/flame"
  12719. Endwhoosh:
  12720.  SECTION music,code_c
  12721.  
  12722. UseAllChannels: dc.w 0
  12723.  
  12724. mt_init:move.l    mt_data,a0
  12725.     move.l    a0,a1
  12726.     add.l    #$3b8,a1
  12727.     moveq    #$7f,d0
  12728.     moveq    #0,d1
  12729. mt_loop:move.l    d1,d2
  12730.     subq.w    #1,d0
  12731. mt_lop2:move.b    (a1)+,d1
  12732.     cmp.b    d2,d1
  12733.     bgt.s    mt_loop
  12734.     dbf    d0,mt_lop2
  12735.     addq.b    #1,d2
  12736.  
  12737.     lea    mt_samplestarts(pc),a1
  12738.     asl.l    #8,d2
  12739.     asl.l    #2,d2
  12740.     add.l    #$43c,d2
  12741.     add.l    a0,d2
  12742.     move.l    d2,a2
  12743.     moveq    #$1e,d0
  12744. mt_lop3:clr.l    (a2)
  12745.     move.l    a2,(a1)+
  12746.     moveq    #0,d1
  12747.     move.w    42(a0),d1
  12748.     asl.l    #1,d1
  12749.     add.l    d1,a2
  12750.     add.l    #$1e,a0
  12751.     dbf    d0,mt_lop3
  12752.  
  12753.     or.b    #$2,$bfe001
  12754.     move.b    #$6,mt_speed
  12755.     clr.w    $dff0a8
  12756.     clr.w    $dff0b8
  12757.     clr.w    $dff0c8
  12758.     clr.w    $dff0d8
  12759.     clr.b    mt_songpos
  12760.     clr.b    mt_counter
  12761.     clr.w    mt_pattpos
  12762.     rts
  12763.  
  12764. mt_end:    clr.w    $dff0a8
  12765.     clr.w    $dff0b8
  12766.     clr.w    $dff0c8
  12767.     clr.w    $dff0d8
  12768.     move.w    #$f,$dff096
  12769.     rts
  12770.  
  12771. mt_music:
  12772.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  12773.     move.l    mt_data,a0
  12774.     addq.b    #$1,mt_counter
  12775.     move.b    mt_counter,D0
  12776.     cmp.b    mt_speed,D0
  12777.     blt.s    mt_nonew
  12778.     clr.b    mt_counter
  12779.     bra    mt_getnew
  12780.  
  12781. mt_nonew:
  12782.     lea    mt_voice1(pc),a6
  12783.     lea    $dff0a0,a5
  12784.     bsr    mt_checkcom
  12785.     lea    mt_voice2(pc),a6
  12786.     lea    $dff0b0,a5
  12787.     bsr    mt_checkcom
  12788.     tst.b UseAllChannels
  12789.     beq mt_endr
  12790.      lea    mt_voice3(pc),a6
  12791.     lea    $dff0c0,a5
  12792.     bsr    mt_checkcom
  12793.     lea    mt_voice4(pc),a6
  12794.     lea    $dff0d0,a5
  12795.     bsr    mt_checkcom
  12796.     bra    mt_endr
  12797.  
  12798. mt_arpeggio:
  12799.     moveq    #0,d0
  12800.     move.b    mt_counter,d0
  12801.     divs    #$3,d0
  12802.     swap    d0
  12803.     cmp.w    #$0,d0
  12804.     beq.s    mt_arp2
  12805.     cmp.w    #$2,d0
  12806.     beq.s    mt_arp1
  12807.  
  12808.     moveq    #0,d0
  12809.     move.b    $3(a6),d0
  12810.     lsr.b    #4,d0
  12811.     bra.s    mt_arp3
  12812. mt_arp1:moveq    #0,d0
  12813.     move.b    $3(a6),d0
  12814.     and.b    #$f,d0
  12815.     bra.s    mt_arp3
  12816. mt_arp2:move.w    $10(a6),d2
  12817.     bra.s    mt_arp4
  12818. mt_arp3:asl.w    #1,d0
  12819.     moveq    #0,d1
  12820.     move.w    $10(a6),d1
  12821.     lea    mt_periods(pc),a0
  12822.     moveq    #$24,d7
  12823. mt_arploop:
  12824.     move.w    (a0,d0.w),d2
  12825.     cmp.w    (a0),d1
  12826.     bge.s    mt_arp4
  12827.     addq.l    #2,a0
  12828.     dbf    d7,mt_arploop
  12829.     rts
  12830. mt_arp4:move.w    d2,$6(a5)
  12831.     rts
  12832.  
  12833. mt_getnew:
  12834.     move.l    mt_data,a0
  12835.     move.l    a0,a3
  12836.     move.l    a0,a2
  12837.     add.l    #$c,a3
  12838.     add.l    #$3b8,a2
  12839.     add.l    #$43c,a0
  12840.  
  12841.     moveq    #0,d0
  12842.     move.l    d0,d1
  12843.     move.b    mt_songpos,d0
  12844.     move.b    (a2,d0.w),d1
  12845.     asl.l    #8,d1
  12846.     asl.l    #2,d1
  12847.     add.w    mt_pattpos,d1
  12848.     clr.w    mt_dmacon
  12849.  
  12850.     lea    $dff0a0,a5
  12851.     lea    mt_voice1(pc),a6
  12852.     bsr    mt_playvoice
  12853.     lea    $dff0b0,a5
  12854.     lea    mt_voice2(pc),a6
  12855.     bsr    mt_playvoice
  12856.     tst.b UseAllChannels
  12857.     beq mt_setdma
  12858.     lea    $dff0c0,a5
  12859.     lea    mt_voice3(pc),a6
  12860.     bsr    mt_playvoice
  12861.     lea    $dff0d0,a5
  12862.     lea    mt_voice4(pc),a6
  12863.     bsr    mt_playvoice
  12864.     bra    mt_setdma
  12865.  
  12866. PROTCALC:
  12867. ;    include "ab3:source_4000/protcalc.s"
  12868.     incbin "ab3:includes/protcalc.bin"
  12869. ENDPROTCALC:
  12870.  
  12871. mt_playvoice:
  12872.     move.l    (a0,d1.l),(a6)
  12873.     addq.l    #4,d1
  12874.     moveq    #0,d2
  12875.     move.b    $2(a6),d2
  12876.     and.b    #$f0,d2
  12877.     lsr.b    #4,d2
  12878.     move.b    (a6),d0
  12879.     and.b    #$f0,d0
  12880.     or.b    d0,d2
  12881.     tst.b    d2
  12882.     beq.s    mt_setregs
  12883.     moveq    #0,d3
  12884.     lea    mt_samplestarts(pc),a1
  12885.     move.l    d2,d4
  12886.     subq.l    #$1,d2
  12887.     asl.l    #2,d2
  12888.     mulu    #$1e,d4
  12889.     move.l    (a1,d2.l),$4(a6)
  12890.     move.w    (a3,d4.l),$8(a6)
  12891.     move.w    $2(a3,d4.l),$12(a6)
  12892.     move.w    $4(a3,d4.l),d3
  12893.     tst.w    d3
  12894.     beq.s    mt_noloop
  12895.     move.l    $4(a6),d2
  12896.     asl.w    #1,d3
  12897.     add.l    d3,d2
  12898.     move.l    d2,$a(a6)
  12899.     move.w    $4(a3,d4.l),d0
  12900.     add.w    $6(a3,d4.l),d0
  12901.     move.w    d0,8(a6)
  12902.     move.w    $6(a3,d4.l),$e(a6)
  12903.     move.w    $12(a6),d0
  12904.     asr.w #2,d0
  12905.     move.w d0,$8(a5)
  12906.     bra.s    mt_setregs
  12907. mt_noloop:
  12908.     move.l    $4(a6),d2
  12909.     add.l    d3,d2
  12910.     move.l    d2,$a(a6)
  12911.     move.w    $6(a3,d4.l),$e(a6)
  12912.     move.w    $12(a6),d0
  12913.     asr.w #2,d0
  12914.     move.w d0,$8(a5)
  12915. mt_setregs:
  12916.     move.w    (a6),d0
  12917.     and.w    #$fff,d0
  12918.     beq    mt_checkcom2
  12919.     move.b    $2(a6),d0
  12920.     and.b    #$F,d0
  12921.     cmp.b    #$3,d0
  12922.     bne.s    mt_setperiod
  12923.     bsr    mt_setmyport
  12924.     bra    mt_checkcom2
  12925. mt_setperiod:
  12926.     move.w    (a6),$10(a6)
  12927.     and.w    #$fff,$10(a6)
  12928.     move.w    $14(a6),d0
  12929.     move.w    d0,$dff096
  12930.     clr.b    $1b(a6)
  12931.  
  12932.     move.l    $4(a6),(a5)
  12933.     move.w    $8(a6),$4(a5)
  12934.     move.w    $10(a6),d0
  12935.     and.w    #$fff,d0
  12936.     move.w    d0,$6(a5)
  12937.     move.w    $14(a6),d0
  12938.     or.w    d0,mt_dmacon
  12939.     bra    mt_checkcom2
  12940.  
  12941. mt_setdma:
  12942.      move.w #250,d0
  12943. mt_wait:
  12944.      add.w #1,testchip
  12945.      dbra d0,mt_wait
  12946.     move.w    mt_dmacon,d0
  12947.     or.w    #$8000,d0
  12948.     and.w #%1111111111110011,d0
  12949.     move.w    d0,$dff096
  12950.     move.w #250,d0
  12951. mt_wait2:
  12952.     add.w #1,testchip
  12953.     dbra    d0,mt_wait2
  12954.     lea    $dff000,a5
  12955.     tst.b UseAllChannels
  12956.     beq.s noall
  12957.     lea    mt_voice4(pc),a6
  12958.     move.l    $a(a6),$d0(a5)
  12959.     move.w    $e(a6),$d4(a5)
  12960.     lea    mt_voice3(pc),a6
  12961.     move.l    $a(a6),$c0(a5)
  12962.     move.w    $e(a6),$c4(a5)
  12963. noall:
  12964.     lea    mt_voice2(pc),a6
  12965.     move.l    $a(a6),$b0(a5)
  12966.     move.w    $e(a6),$b4(a5)
  12967.     lea    mt_voice1(pc),a6
  12968.     move.l    $a(a6),$a0(a5)
  12969.     move.w    $e(a6),$a4(a5)
  12970.  
  12971.     add.w    #$10,mt_pattpos
  12972.     cmp.w    #$400,mt_pattpos
  12973.     bne.s    mt_endr
  12974. mt_nex:    clr.w    mt_pattpos
  12975.     clr.b    mt_break
  12976.     addq.b    #1,mt_songpos
  12977.     and.b    #$7f,mt_songpos
  12978.     move.b    mt_songpos,d1
  12979. ;    cmp.b    mt_data+$3b6,d1
  12980. ;    bne.s    mt_endr
  12981. ;    move.b    mt_data+$3b7,mt_songpos
  12982. mt_endr:tst.b    mt_break
  12983.     bne.s    mt_nex
  12984.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  12985.     rts
  12986.  
  12987. mt_setmyport:
  12988.     move.w    (a6),d2
  12989.     and.w    #$fff,d2
  12990.     move.w    d2,$18(a6)
  12991.     move.w    $10(a6),d0
  12992.     clr.b    $16(a6)
  12993.     cmp.w    d0,d2
  12994.     beq.s    mt_clrport
  12995.     bge.s    mt_rt
  12996.     move.b    #$1,$16(a6)
  12997.     rts
  12998. mt_clrport:
  12999.     clr.w    $18(a6)
  13000. mt_rt:    rts
  13001.  
  13002. CODESTORE: dc.l 0
  13003.  
  13004. mt_myport:
  13005.     move.b    $3(a6),d0
  13006.     beq.s    mt_myslide
  13007.     move.b    d0,$17(a6)
  13008.     clr.b    $3(a6)
  13009. mt_myslide:
  13010.     tst.w    $18(a6)
  13011.     beq.s    mt_rt
  13012.     moveq    #0,d0
  13013.     move.b    $17(a6),d0
  13014.     tst.b    $16(a6)
  13015.     bne.s    mt_mysub
  13016.     add.w    d0,$10(a6)
  13017.     move.w    $18(a6),d0
  13018.     cmp.w    $10(a6),d0
  13019.     bgt.s    mt_myok
  13020.     move.w    $18(a6),$10(a6)
  13021.     clr.w    $18(a6)
  13022. mt_myok:move.w    $10(a6),$6(a5)
  13023.     rts
  13024. mt_mysub:
  13025.     sub.w    d0,$10(a6)
  13026.     move.w    $18(a6),d0
  13027.     cmp.w    $10(a6),d0
  13028.     blt.s    mt_myok
  13029.     move.w    $18(a6),$10(a6)
  13030.     clr.w    $18(a6)
  13031.     move.w    $10(a6),$6(a5)
  13032.     rts
  13033.  
  13034. mt_vib:    move.b    $3(a6),d0
  13035.     beq.s    mt_vi
  13036.     move.b    d0,$1a(a6)
  13037.  
  13038. mt_vi:    move.b    $1b(a6),d0
  13039.     lea    mt_sin(pc),a4
  13040.     lsr.w    #$2,d0
  13041.     and.w    #$1f,d0
  13042.     moveq    #0,d2
  13043.     move.b    (a4,d0.w),d2
  13044.     move.b    $1a(a6),d0
  13045.     and.w    #$f,d0
  13046.     mulu    d0,d2
  13047.     lsr.w    #$6,d2
  13048.     move.w    $10(a6),d0
  13049.     tst.b    $1b(a6)
  13050.     bmi.s    mt_vibmin
  13051.     add.w    d2,d0
  13052.     bra.s    mt_vib2
  13053. mt_vibmin:
  13054.     sub.w    d2,d0
  13055. mt_vib2:move.w    d0,$6(a5)
  13056.     move.b    $1a(a6),d0
  13057.     lsr.w    #$2,d0
  13058.     and.w    #$3c,d0
  13059.     add.b    d0,$1b(a6)
  13060.     rts
  13061.  
  13062. mt_nop:    move.w    $10(a6),$6(a5)
  13063.     rts
  13064.  
  13065.  
  13066. mt_checkcom:
  13067.     move.w    $2(a6),d0
  13068.     and.w    #$fff,d0
  13069.     beq.s    mt_nop
  13070.     move.b    $2(a6),d0
  13071.     and.b    #$f,d0
  13072.     tst.b    d0
  13073.     beq    mt_arpeggio
  13074.     cmp.b    #$1,d0
  13075.     beq.s    mt_portup
  13076.     cmp.b    #$2,d0
  13077.     beq    mt_portdown
  13078.     cmp.b    #$3,d0
  13079.     beq    mt_myport
  13080.     cmp.b    #$4,d0
  13081.     beq    mt_vib
  13082.     move.w    $10(a6),$6(a5)
  13083.     cmp.b    #$a,d0
  13084.     beq.s    mt_volslide
  13085.     rts
  13086.  
  13087. mt_volslide:
  13088.     moveq    #0,d0
  13089.     move.b    $3(a6),d0
  13090.     lsr.b    #4,d0
  13091.     tst.b    d0
  13092.     beq.s    mt_voldown
  13093.     add.w    d0,$12(a6)
  13094.     cmp.w    #$40,$12(a6)
  13095.     bmi.s    mt_vol2
  13096.     move.w    #$40,$12(a6)
  13097. mt_vol2:move.w    $12(a6),d0
  13098.     asr.w #2,d0
  13099.     move.w d0,$8(a5)
  13100.     rts
  13101.  
  13102. mt_voldown:
  13103.     moveq    #0,d0
  13104.     move.b    $3(a6),d0
  13105.     and.b    #$f,d0
  13106.     sub.w    d0,$12(a6)
  13107.     bpl.s    mt_vol3
  13108.     clr.w    $12(a6)
  13109. mt_vol3:move.w    $12(a6),d0
  13110.     asr.w #2,d0
  13111.     move.w d0,$8(a5)
  13112.     rts
  13113.  
  13114. mt_portup:
  13115.     moveq    #0,d0
  13116.     move.b    $3(a6),d0
  13117.     sub.w    d0,$10(a6)
  13118.     move.w    $10(a6),d0
  13119.     and.w    #$fff,d0
  13120.     cmp.w    #$71,d0
  13121.     bpl.s    mt_por2
  13122.     and.w    #$f000,$10(a6)
  13123.     or.w    #$71,$10(a6)
  13124. mt_por2:move.w    $10(a6),d0
  13125.     and.w    #$fff,d0
  13126.     move.w    d0,$6(a5)
  13127.     rts
  13128.  
  13129. mt_portdown:
  13130.     clr.w    d0
  13131.     move.b    $3(a6),d0
  13132.     add.w    d0,$10(a6)
  13133.     move.w    $10(a6),d0
  13134.     and.w    #$fff,d0
  13135.     cmp.w    #$358,d0
  13136.     bmi.s    mt_por3
  13137.     and.w    #$f000,$10(a6)
  13138.     or.w    #$358,$10(a6)
  13139. mt_por3:move.w    $10(a6),d0
  13140.     and.w    #$fff,d0
  13141.     move.w    d0,$6(a5)
  13142.     rts
  13143.  
  13144. mt_checkcom2:
  13145.     move.b    $2(a6),d0
  13146.     and.b    #$f,d0
  13147.     cmp.b    #$e,d0
  13148.     beq.s    mt_setfilt
  13149.     cmp.b    #$d,d0
  13150.     beq.s    mt_pattbreak
  13151.     cmp.b    #$b,d0
  13152.     beq.s    mt_posjmp
  13153.     cmp.b    #$c,d0
  13154.     beq.s    mt_setvol
  13155.     cmp.b    #$f,d0
  13156.     beq.s    mt_setspeed
  13157.     rts
  13158.  
  13159. mt_setfilt:
  13160.     move.b    $3(a6),d0
  13161.     and.b    #$1,d0
  13162.     asl.b    #$1,d0
  13163.     and.b    #$fd,$bfe001
  13164.     or.b    d0,$bfe001
  13165.     rts
  13166. mt_pattbreak:
  13167.     not.b    mt_break
  13168.     rts
  13169. mt_posjmp:
  13170.     st reachedend
  13171.     move.b    $3(a6),d0
  13172.     subq.b    #$1,d0
  13173.     move.b    d0,mt_songpos
  13174.     not.b    mt_break
  13175.     rts
  13176. mt_setvol:
  13177.     cmp.b    #$40,$3(a6)
  13178.     ble.s    mt_vol4
  13179.     move.b    #$40,$3(a6)
  13180. mt_vol4:move.b    $3(a6),d0
  13181.     asr.w #2,d0
  13182.     move.w d0,$8(a5)
  13183.     rts
  13184. mt_setspeed:
  13185.     cmp.b    #$1f,$3(a6)
  13186.     ble.s    mt_sets
  13187.     move.b    #$1f,$3(a6)
  13188. mt_sets:move.b    $3(a6),d0
  13189.     beq.s    mt_rts2
  13190.     move.b    d0,mt_speed
  13191.     clr.b    mt_counter
  13192. mt_rts2:rts
  13193.  
  13194. mt_sin:
  13195.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  13196.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  13197.  
  13198. mt_periods:
  13199.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  13200.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  13201.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  13202.  DC.w $007f,$0078,$0071,$0000,$0000
  13203.  
  13204. reachedend: dc.b 0
  13205. mt_speed:    DC.b    6
  13206. mt_songpos:    DC.b    0
  13207. mt_pattpos:    DC.w    0
  13208. mt_counter:    DC.b    0
  13209.  
  13210. mt_break:    DC.b    0
  13211. mt_dmacon:    DC.w    0
  13212. mt_samplestarts:DS.L    $1f
  13213. mt_voice1:    DS.w    10
  13214.         DC.w    1
  13215.         DS.w    3
  13216. mt_voice2:    DS.w    10
  13217.         DC.w    2
  13218.         DS.w    3
  13219. mt_voice3:    DS.w    10
  13220.         DC.w    4
  13221.         DS.w    3
  13222. mt_voice4:    DS.w    10
  13223.         DC.w    8
  13224.         DS.w    3
  13225.  
  13226. CHEATPTR: dc.l 0
  13227. CHEATNUM: dc.l 0
  13228.  
  13229. testchip: dc.w 0
  13230.  
  13231. ;/* End of File */
  13232. mt_data: dc.l 0
  13233. tstchip: dc.l 0
  13234.  include "SERIAL_NIGHTMARE"
  13235.  
  13236. ingame:
  13237. ; incbin "ab3:includes/ingame"
  13238. gameover: incbin "ab3:includes/gameover"
  13239. welldone: incbin "ab3:includes/welldone"
  13240.  
  13241.  
  13242.